xmetric / Use cases

Find Decaying Articles from a GA4 Pages and Screens Export

To find decaying blog posts and landing pages in Google Analytics 4, export the GA4 Pages and screens report broken down by Month as a CSV and open it in xmetric. A FIXED Level of Detail expression finds each URL's peak monthly traffic and ranks pages by how many views and conversions they have lost since peak.

Chart your own CSV

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.

  1. In Google Analytics 4, navigate to Reports > Engagement > Pages and screens.
  2. Set the date range to the last 12 months. Set the primary dimension to Page path and screen class, then click + to add Year month (formatted YYYYMM) as a secondary dimension.
  3. Click Share this report > Download File > Download CSV (exports up to 100,000 rows as of October 2026).
GA4 Export Column NameData TypeRole in Content Decay Model
Page path and screen classStringURL identifier (for example /guides/fixed-lod/)
Year monthString / DateMonthly bucket (YYYYMM, such as 202609)
ViewsIntegerTotal pageviews in that month
Active usersIntegerUnique engaged users visiting that page in the month
Average engagement time per active userFloat (seconds)Checks whether decaying traffic also suffers falling dwell time
Key eventsIntegerConversions 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]
END

3. 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

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.