AdSense rejected the site. The ads.txt was fine.

The Google AdSense verdict landed 10 July at 17:42 BST: rejected, “Needs attention: Low value content.” Authorised Digital Sellers: tick. No policy strikes: tick. The ads.txt file was correct, the account was clean. Google had decided the site’s content wasn’t worth serving ads against.

“Low value content” is not a vague disapproval. It’s a named item in Google’s inventory-value policy. I traced the rejection to a literal match in that policy text during the 11 July root-cause audit.

What happened before submission

On 27 June the site wasn’t ready. Five surfaces were flagged as too thin: four calculator landing pages and the gilts explainer. I expanded all five in a single ultracode run. Eight pillar articles followed in four weekdays. Indexation reached 78.6% across the content estate.

On 2 July the readiness check returned yes. To confirm live status rather than rely on the AdSense dashboard, I built a telemetry skill (B-078) that day. It gives read-only access to the AdSense Management API v2, covering approval status, earnings, and payments, with credentials in Keychain rather than .env. The OAuth flow failed silently on the first attempt (a blank paste at the client ID prompt) and succeeded on the second after I fetched the correct credentials from Keychain. The first read: account READY, site GETTING_READY, Auto Ads enabled, no policy strikes.

That same day, running Google’s reviewer checklist manually produced a score of 7 out of 8.

The one red

The failing item: “diverse and engaging content in a variety of formats (articles, images and videos).” Of 38 content pieces on the site at submission time, zero had embedded images or diagrams. The calculators are interactive tools; the supporting articles were prose-only. A pure-text content estate fails that criterion cleanly.

The fix was an ArticleFigure component and six verified SVG diagrams shipped across the pillar content areas. Each went into an article that had been explaining structured information entirely through text. The media-diversity gap closed during the review window.

It wasn’t enough.

What Google actually flagged

On 11 July I mapped “Low value content” to the /resources section. The match sat at /resources/blog and /resources/guides.

Both existed as listing pages. They listed content correctly. What they didn’t do was function as editorial destinations. From a reviewer’s position, they read as navigation infrastructure: automatically-assembled indices rather than pages a user would arrive at with intent. Google’s inventory-value policy has an explicit criterion for this. Pages that exist to route users rather than serve them are thin by definition, regardless of the quality of the articles they link to.

That was the match.

Remediation step one: rebuild both as real hub listings with genuine editorial structure.

The checklist is an editorial audit

This is the reframe worth making explicit. The natural reading of AdSense approval is: configure the ads.txt, link the account, enable Auto Ads, wait for a result. Those steps are entry requirements. They are not the review.

Google’s review is a content-quality assessment run against a published policy. The inventory-value policy is publicly available. The reviewer checklist is derivable from it. What varies is which pages a reviewer evaluates during the assessment window, and every page type on the site is a candidate, not just the articles.

The 7/8 score on 2 July identified one gap and missed another. The format-diversity red was visible. The hub-page problem wasn’t one of the eight checklist items, so it didn’t surface directly. It falls under the general “original and relevant content” criterion in the policy, but that criterion operates at a level of abstraction where hub pages look fine if the articles they link to are fine. That’s not how Google evaluates them independently.

Running the checklist is the right move. Running it only against article pages is not.

What the SVG diagrams taught me

Six diagrams closed the format-diversity score. They didn’t prevent rejection. That’s not an argument against building them. Diagrams add genuine value to articles explaining structured information through prose alone, and they’re staying regardless of what the next review returns.

The lesson is narrower: Google’s format-diversity criterion and Google’s low-value-content criterion are independent assessments. Satisfying one does not close the other. Format range proves the site uses multiple content modes. It does not rescue a hub page with no editorial substance sitting alongside the articles.

The 7/8 score created a framing problem. One gap identified, one gap closed, submission proceeded. The question that should have followed “what is the one red?” was “what is not visible in this score?” It didn’t get asked.

Thin means different things

A thin calculator page lacks supporting context: no worked examples, no explanation of the underlying calculation, no reason to stay once the number appears. The remediation is content depth.

A thin hub page is a different failure mode. The articles it links to can be substantial. The hub page is thin when it exists only as wayfinding: a list of links with no editorial layer explaining why these topics, in this order, for this audience.

/resources/blog needed a clear account of what the blog covers and who it’s for. /resources/guides needed to explain the curation principle: why these topics, at what depth, for a UK tax and finance audience. Both are short editorial pieces. Neither existed.

Treating hub pages as scaffolding rather than content is the mistake. Scaffolding doesn’t pass a content-quality review.

Where this sits

Remediation step one is done: /resources/blog and /resources/guides rebuilt as real hub listings. Resubmission comes after a reindex cycle. The telemetry skill will surface the next status change without a manual check. The current read is GETTING_READY, and the next transition will either confirm approval or identify the next item to address.

The technical setup has not needed touching since 2 July: ads.txt, account linking, Auto Ads. That part was correct. The site was submittable on 2 July. It wasn’t approvable.

Those are different bars. The gap showed up eight days into review as a content-quality rejection on a site whose articles were strong enough to submit in the first place.

If you’re running a similar path: work from the inventory-value policy directly, not just the eight-point checklist. Apply it to every page type. Not just the articles. The hub pages, the category indexes, the listing pages. Any page Google might evaluate is a page that can fail independently of how good the rest of the site is.

The ads.txt is not the hard part.

All writing