Field notes
The RPM dip that wasn't seasonal
One of our sites, a public-health information site, watched its page RPM fall from roughly $2.61 to roughly $0.66 while traffic did nothing wrong. Pageviews held, placement was untouched, and the calendar offered no excuse. The cause turned out to be a classification: Google's systems had rebucketed the site as news inventory, which changes who bids on it and what they pay. We had triggered it ourselves. Here is the timeline, the catch, and the part nobody warns you about: the recovery after the fix.
This is the worked example behind the diagnostic at RPM fell, traffic held. Undiagnosed drop of your own? Start at the triage quiz.
By Mario Bailey · Published
The shape
RPM down, everything else flat
The site's page RPM had run in a $2 to $5 range. In May it collapsed toward roughly $0.66, touching roughly $0.60 at the mid-May trough, and stayed on the floor for weeks. Every usual suspect alibied out. Traffic held, so it was not a ranking or indexing problem. The ad layout had not been touched, so it was not placement drift. And this was May, not the January cliff, so the seasonal story did not fit either: nothing in the calendar takes three quarters of your RPM in a month while pageviews hold.
When the supply side is flat and the price side collapses, the question moves to demand: who is bidding on these impressions, and what changed about how the auction sees them? Demand has causes beyond seasonality, and classification is one of them. Ad systems do not price your site as "your site"; they price it as a category of inventory. If the category label moves, the advertiser pool bidding on you moves with it, at the same traffic and the same layout.
The catch
The change inventory pointed at us
The same rule we apply to ranking drops applies to revenue drops: before blaming the market, write down every change you shipped in the window. Ours had exactly one candidate. On May 6 we had shipped news markup on the site: news-article structured data and a Google News sitemap. The content had not become news; only the labels had. Google's systems took the labels at their word and rebucketed the site as news inventory, and news inventory sells to a different, cheaper advertiser pool than health inventory. The RPM collapse followed the deploy.
That is the diagnostic sequence worth keeping: RPM down, traffic flat, placement unchanged rules out the failures you can see on the page. The next question is how Google is categorizing the property. In our case the answer was sitting in our own deploy log, and confirmation arrived later from an unexpected place: after the fix, the site's benchmarking peer group in analytics read as a medical-content group rather than news, independent evidence that the classifier had genuinely moved. We now watch that peer label as a free early-warning canary for classification drift.
The fix and the curve
Re-trust is a lag, not a switch
We removed the news signals on June 9: the news-article schema and the news sitemap came out, and the article markup went back to plain medical-article types. On June 17 we verified the removal was clean in the shipped code. The revenue did not snap back with the deploy. It climbed.
| When | Page RPM | Note |
|---|---|---|
| Before the incident | $2 to $5, roughly $2.61 going in | The baseline. |
| May 6 | News markup ships. Our own deploy. | |
| Mid-May trough | roughly $0.60 to $0.66 | Traffic flat throughout. |
| June 9 | News signals removed. | |
| June 17 | roughly $1.80 trailing 7 days | Removal verified clean; about 2.7x the trough, still under baseline. |
| Week of June 22 | $5.23 | At or above the target range, above the pre-incident number. |
Page RPM from our own AdSense records for the site, rounded as written. One attribution caveat we owe you: the ad account was young (opened in late April), and another site in the same account that was never misclassified also rose over June, so some of the late lift is account-level trust ramping rather than the reclassification alone.
Eight days after the removal, the trailing week read roughly $1.80: recovering, and still well under baseline. Had we judged the fix by week one, we would have called it a failure and started changing other things, which is how one misdiagnosis becomes three. Two weeks after the removal, the weekly number printed $5.23. Advertisers and classifiers re-trust on their own schedule. A correct fix and a flat first week are not a contradiction; they are the normal shape of demand-side recovery.
What we keep
Three lessons from one dip
First: the demand side has causes beyond seasonality, and classification is one of them. Your RPM is priced against a category label you mostly cannot see, and your own markup feeds that label. Second: the diagnostic order works. RPM down with traffic flat and placement unchanged clears the visible suspects; after that, ask how Google is categorizing the property and inventory your own deploys, because the cause may be something you shipped. Third: recovery after a demand-side fix is a curve. Verify the fix in the code, then give the classifier and the advertisers weeks, not days, before you grade it.
Methods: figures are from our own AdSense and analytics records for the site, rounded as written. The site is not named because we keep our network and this publication separate. The lesson survives the anonymity; the numbers are real.
If your RPM fell and traffic held
The general method, seasonality and demand and placement and consent in the order to check them, is at RPM fell, traffic held. If the afternoon in the dashboard points at your layout rather than the market, that is the case the audit exists for; and if it is the market, the audit will say so.
Get the audit Run the RPM diagnostic