Chart your export here
Drop a CSV here. xmetric reads every row in this browser and draws a first chart you can regroup or change the measure of. Nothing is uploaded.
No file loaded yet. You can also drop a CSV on this box.
How to export monthly page traffic from GA4
Google Analytics 4's built-in comparison date picker only compares two flat windows (such as last 30 days vs. previous 30 days), which misses articles that peaked six months ago and declined steadily each month.
- In Google Analytics 4, navigate to Reports > Engagement > Pages and screens.
- Set the date range to the last 12 months. Set the primary dimension to
Page path and screen class, then click+to addYear month(formattedYYYYMM) as a secondary dimension. - Click Share this report > Download File > Download CSV (exports up to 100,000 rows as of October 2026).
| GA4 Export Column Name | Data Type | Role in Content Decay Model |
|---|---|---|
Page path and screen class | String | URL identifier (for example /guides/fixed-lod/) |
Year month | String / Date | Monthly bucket (YYYYMM, such as 202609) |
Views | Integer | Total pageviews in that month |
Active users | Integer | Unique engaged users visiting that page in the month |
Average engagement time per active user | Float (seconds) | Checks whether decaying traffic also suffers falling dwell time |
Key events | Integer | Conversions triggered on or after viewing the page |
Formulas to detect and rank decaying content
1. Peak Monthly Views per URL (FIXED LOD)
First, lock in the highest monthly view count each URL ever achieved inside your 12-month export window.
xmetric / Tableau formula ([Peak Monthly Views]):
{ FIXED [Page path and screen class] : MAX([Views]) }SQL equivalent:
WITH monthly_page_views AS (
SELECT
"Page path and screen class" AS page_path,
"Year month" AS year_month,
SUM("Views") AS views,
SUM("Key events") AS key_events
FROM ga4_pages_and_screens
GROUP BY 1, 2
),
peak_per_page AS (
SELECT
page_path,
year_month,
views,
key_events,
MAX(views) OVER (PARTITION BY page_path) AS peak_monthly_views,
FIRST_VALUE(year_month) OVER (PARTITION BY page_path ORDER BY views DESC) AS peak_month,
MAX(year_month) OVER () AS latest_month
FROM monthly_page_views
)
SELECT
page_path,
peak_month,
peak_monthly_views,
views AS latest_month_views,
(peak_monthly_views - views) AS views_lost_from_peak,
(views - peak_monthly_views) * 1.0 / NULLIF(peak_monthly_views, 0) AS decay_pct
FROM peak_per_page
WHERE year_month = latest_month
AND peak_month < latest_month
AND peak_monthly_views >= 500
ORDER BY views_lost_from_peak DESC;2. Views Lost Since Peak (Refresh Priority Score)
For example (sample numbers), a page that dropped from 10,000 views to 6,000 views (-40%, 4,000 views lost) is worth refreshing before a page that dropped from 200 views to 40 views (-80%, 160 views lost). Sort your refresh backlog by absolute views or key events lost from peak, not percentage drop alone.
xmetric / Tableau formula:
IF [Year month] = { FIXED : MAX([Year month]) }
THEN [Peak Monthly Views] - [Views]
END3. Months Since Peak (Table Calculation / LOD)
Differentiate a seasonal spike from a multi-month decay trend by checking whether traffic has declined for at least 3 consecutive months after its peak month.
xmetric / Tableau formula ([Peak Month]):
{ FIXED [Page path and screen class] :
MAX(IF [Views] = [Peak Monthly Views] THEN [Year month] END)
}Limits of GA4 exports for content audits
- 100,000-row export ceiling in the GA4 UI: Because
Page path and screen classcrossed with 12Year monthvalues multiplies row count by 12, sites with more than ~8,300 active URLs will hit the 100,000-row UI CSV export limit (as of October 2026). Filter the GA4 report to your content subfolder (such asPage path and screen classcontains/blog/) before exporting, or export from GA4 Explorations (TSV/CSV) or from BigQuery as CSV or Parquet (the xmetric app imports both). - All Traffic vs. Organic Search segment: A viral social post will look like "content decay" the following month unless you filter the GA4 report to
Session primary channel group = Organic Searchbefore downloading the CSV.
Questions people ask
How do I avoid flagging seasonal pages (like Black Friday or tax guides) as decaying?
Export 24 months of data (if your GA4 property history covers two years) and compare the latest month against both the trailing 6-month peak and the same month last year (LOOKUP(SUM([Views]), -12) as a table calculation in the xmetric app).
Why are multiple rows showing the same URL path with trailing slashes or uppercase letters?
GA4 treats /pricing, /pricing/, and /Pricing as distinct strings in Page path and screen class. Create a calculated dimension in xmetric with LOWER(RTRIM([Page path and screen class], '/')) so xmetric aggregates all variations into one curve.
Does xmetric upload my traffic CSV to a server?
No. Files you drop are read in your browser and nothing is uploaded, unless you sign in and save a workbook online. The app also imports Excel (.xlsx) and Parquet files.
Can I run this content decay check from Claude or ChatGPT?
Not yet. An xmetric MCP server, ChatGPT app and Claude connector are in development. They will let a coding or content agent query your GA4 export and return a ranked refresh list.
Drop your GA4 Pages_and_screens.csv export at the top of the page for a first chart, then build the refresh priority table in the xmetric app with the LOD formulas above.