Why 'last 30 days' is the wrong window to compare

Compare the last 30 days with the 30 before and a business that has not changed can show a 5% drop, then a 5% rise two days later. The calendar moved, not the business. Here is why, and which windows compare fairly.

Kosmas Botsis, Founder of Glancely · 5 October 2026 · 4 min read

In short

  • 30 days is four weeks and two days, and the two extra days differ from one window to the next.
  • On a business that never changes, Last 30 days can show −5% to +5%, more for B2B sites with quiet weekends.
  • Calendar months, month to date and quarters differ in length and weekdays too.
  • Compare 7, 28 or 91 days with the same length before, and go back 364 days for a year-on-year comparison.

Pick Last 30 days in Google Analytics, compare it with the 30 days before, and a business whose traffic has not changed at all can show a 5% drop. Look again two days later and the same business shows a 5% rise. Nothing happened to the business. The calendar moved.

It is one of the most common ways a report says something false while every number in it is correct, and it is easy to avoid once you see why it happens.

Why 30 days is the problem

Most sites have a weekly rhythm. A shop gets fewer visits at the weekend, or more; a B2B site goes quiet on Saturday and Sunday. Any two windows you compare should therefore hold the same mix of weekdays, or the comparison partly measures the mix.

Thirty days is four weeks and two days. Every 30-day window has two extra days on top of its four whole weeks, and the window before it has two different extra days, because the two windows start 30 days apart, not a whole number of weeks apart. One window gets an extra Saturday and Sunday; the other gets an extra Thursday and Friday.

A business that never changes

Take a site with exactly 1,000 sessions every weekday and 400 every Saturday and Sunday, every single week. Its real change is 0%. Here is what Last 30 days compared with the previous 30 days says about it, depending on the day you look (dates in October 2026):

Last day of the windowLast 30 daysPrevious 30 daysChange shown
Sunday 4 October24,00025,200−4.8%
Monday 5 October24,60024,6000.0%
Tuesday 6 October25,20024,000+5.0%
Wednesday 7 October25,20024,600+2.4%
Saturday 10 October24,60025,200−2.4%

The same flat business reads anywhere from −4.8% to +5.0%, and swings almost ten points between a Sunday and the Tuesday after it. Make the weekly pattern stronger — a B2B site with 100 sessions on each weekend day instead of 400 — and the range widens to −7.9% to +8.6%.

A change of a few percent on a 30-day comparison is within what the calendar alone can produce. It may be real; the comparison cannot tell you.

Calendar months have it too

Months are worse, because they also differ in length. August 2026 has 31 days, ten of them at the weekend; September 2026 has 30 days and only eight weekend days. For the site above, September comes out 0.8% higher than August despite having a day fewer, purely because it has one more weekday. Turn the pattern around (a site busiest at the weekend) and September would look lower for the same reason.

The same applies to month to date compared with the same days of last month, and to quarters: Q1 2026 has 90 days, Q2 has 91.

How to compare fairly

The rule is short: compare windows that are a whole number of weeks long and start a whole number of weeks apart. Then both hold exactly the same weekdays, and a business that has not changed reads exactly 0%.

  • Use 7, 14, 28 or 91 days rather than 30 or 90. GA4's date picker already offers Last 7 days and Last 28 days, and comparing either with the preceding period keeps the weekday mix identical.
  • For year on year, go back 364 days (52 weeks), not to the same date. The same date last year falls on a different weekday; 364 days back falls on the same one. In GA4 that means a custom comparison range rather than the same-dates-last-year option.
  • When you must report a calendar month — an invoice period, a monthly client report — keep it, but read small changes as noise, or compare the average per weekday rather than the total.
  • Check a custom range by looking at the first day of each window: if they are not the same weekday, the comparison is partly the calendar.

How Glancely handles it

Glancely opens on the last 28 days, compared with the 28 days before. Every other range still works, but when the window it is compared with holds a different number of days or a different mix of weekdays, the date picker marks it with an amber dot that says so, so the figure is read for what it is. A single day is compared with the same weekday a week earlier, not with the day before.

Kosmas Botsis

Kosmas Botsis · Founder of Glancely

Kosmas Botsis is the founder and lead data engineer of KB Analytics, an analytics engineering practice in Athens working with clients across Europe and the US: more than 250 projects for over 194 clients, and in Toptal's top 3% of talent. Glancely is what came out of that work.

More from the blog

  • Why your return on ad spend counts sales your ads didn't make

    Divide all of your revenue by your ad spend and the ads take credit for every organic, direct and email sale. Here is how to work out the return on the channels you actually pay for, and why it can be five times lower.

  • Why your Google Ads campaigns don't line up with GA4's

    Put Google Ads spend beside GA4 revenue by campaign and half the rows often come back empty, because the join is on a name and the names don't agree. Here is where GA4's campaign name comes from, and how to match them without hiding your best campaign.

  • Where Performance Max shows up in GA4

    GA4 files Performance Max visits under a channel called Cross-network, not Paid Search or Paid Shopping. Put its spend anywhere else and every channel's return is wrong; here is where it belongs and how to read it.