AdSense came back on my tool site with the rejection every indie dev dreads:
Low value content. Your site does not yet meet the criteria for use in the Google publisher network… Make sure your site has unique high quality content and a good user experience. Webmaster quality guidelines for thin content.
The site is lans.cloud — 65 single-purpose browser tools (classroom timers, dice rollers, a Dragon Ball power level calculator, that kind of thing). My first instinct was the obvious one: the pages are too thin, I need to write more. That instinct was wrong, and chasing it would have wasted a week and probably made things worse.
Here's the honest write-up: how I checked whether the pages were actually thin, what "low value content" really means for a new site, and the fix that had almost nothing to do with word count.
First: measure, don't assume
Before adding a single word, I audited what every tool page actually renders. Not the templates — the shipped HTML. The question was simple: how much unique, readable prose does each page carry, separate from the interactive widget?
The answer surprised me. Every one of the 65 tools renders:
- 400–1300 words of unique, tool-specific prose — a real intro, "how it works," tips, examples. Not boilerplate; the coin-flip page explains the gambler's fallacy and streak odds, the case-converter walks through ten casing styles.
- A FAQ (5–14 questions) written as real search queries.
- A computed reference/example table.
- Structured data —
WebApplication,FAQPage, andBreadcrumbListJSON-LD, server-rendered into the initial HTML.
There were zero pages under 200 words. The lowest page cleared 400. By Google's literal "minimum content" bar, the site passes comfortably.
So "add more words" was the wrong reflex. And this is the trap I want to save you from: "low value content" is a catch-all label, not a literal word count. If you react to it by bulk-padding every page, you burn effort on the one thing that wasn't broken — and you make your pages more templated and same-y, which is closer to the actual problem.
What "low value content" actually means for a new site
Once you accept the pages aren't thin, you have to ask what the reviewer (and the algorithm behind them) is really reacting to. For a young site, ranked by how likely each is to be the real driver:
1. Site maturity and near-zero traffic — probably the biggest factor. My site was days into indexing: ~150 impressions a day in Search Console, the first click on a tool page barely a week old. AdSense's review for a brand-new, low-traffic site very frequently returns "low value content" as a proxy for "you haven't demonstrated value yet." Tool and generator sites are a known-hard category on top of that — reviewers have seen ten thousand thin calculator clones. No code change fixes this one. It's time and traffic.
2. One genuinely edgy page. The site has a small prank/gag cluster, including a jumpscare-link generator. A page built to startle someone is the one item in a catalog that brushes against Google's "shocking content" sensibilities. It's the highest-leverage fixable signal, even though the page itself is honest (volume-capped, no flashing, ends with a friendly reveal).
3. Template sameness at scale. 65 pages with near-identical layout, heading rhythm, and repeated phrasing can read as low-value in aggregate even when each page's words are unique. This is the real shape of the "thin" complaint for a tool site — not per-page depth, but cross-page homogeneity.
4. Missing trust signals. No dedicated contact page, no contact link in the footer, a homepage that was basically a directory with one sentence of intro. Reviewers look for a clear contact method and a site that explains itself.
Notice that only items 2–4 are code. Item 1, the likely dominant one, is a waiting game.
The discipline part: deleting a planned fix
I'd scoped four workstreams. One was a "de-boilerplate pass" — go reduce the repeated phrasing across all 65 pages to fight the template-sameness signal (item 3). It sounded right. So before doing it, I checked whether the boilerplate was actually there:
# Most-repeated verbatim clause containing "browser", across all tool pages
grep -rhoiE "[A-Z][^.<>{}]*\bbrowser\b[^.<>{}]*" app/**/page.tsx \
| sed 's/^[[:space:]]*//' | sort | uniq -c | sort -rn | head
The single most-repeated sentence appeared twice across 65 pages. The "no sign-up / runs in your browser" phrasings I thought were copy-pasted everywhere were, on inspection, contextually different on every page. The prose was already varied. The sameness was structural (every page is widget → article → FAQ), which is normal and expected for a tool site — not something a text rewrite fixes.
So I deleted the workstream. Rewriting 65 pages would have been pure churn: hours of edits, a giant diff to review, real risk of introducing errors, and no measurable payoff. The evidence didn't support the task, so the task didn't happen. This is worth saying out loud because "do more work" always feels safer than "do nothing here" when you've been rejected — but manufactured busywork is still busywork.
What actually shipped
Three focused changes, deployed the same day:
A real /contact page with an actual email address, plus the missing Contact link in the site footer, plus the page added to the sitemap. Reviewers expect a clear contact method; I had one buried in an "about" paragraph and nothing else.
A homepage value-prop section. The homepage went from an H1 and one sentence over a tool directory, to a server-rendered "what this is / who it's for / how it stays free" block with contextual internal links — genuine prose explaining the privacy angle (everything runs client-side, nothing leaves your browser) and how the free tools are funded. Real content a reviewer can read in the first screen, not just a grid of links.
Removed ads from the jumpscare page — but kept it indexed. This is the nuanced one. The page is one of my best organic-traffic risers, so deleting or de-indexing it would cost real, measurable traffic to chase a speculative policy worry. Instead I stripped the ad slots (a dated code comment so a future me doesn't re-add them) and left the page fully indexed and reachable. Ads never sit next to the edgy page; the traffic stays.
I almost got this last one wrong. My first plan was to noindex the entire prank cluster during the review — until I made myself ask what evidence I actually had that AdSense objected to those pages. The answer was none; it was a hypothesis. And a decisive detail: no ads are even live before approval, so "ads next to edgy content" couldn't have caused this rejection at all. The de-monetization is post-approval hygiene, not a fix for the current review. Being honest about that stopped me from de-indexing eight healthy pages for nothing.
The reapplication trap
Here's the part people get wrong, and it's the most important operational lesson.
There's no hard cap on AdSense reapplications — you can request a review as many times as you want, with no formal cooldown blocking you. Which sounds great and is actively misleading.
- Google tracks your application history. A pattern of rapid re-submissions without substantial change pushes you down the queue and makes reviews slower.
- Google needs to re-crawl your fixes first. The consistent guidance is to wait 2–4 weeks after deploying changes before reapplying, so the review sees your improved site and not a stale crawl. Reapplying the same afternoon you deploy is a near-guaranteed second rejection.
- The realistic rejection→reapproval loop people report is 6–10 weeks.
So "reapply as soon as it's worth doing" is not "reapply this afternoon." My plan: deploy the fixes now, request indexing on the changed URLs, then wait ~3 weeks — long enough for Google to re-crawl and for traffic to keep climbing, which softens the dominant factor (site maturity). Then reapply once, on a genuinely improved and re-crawled site.
The honest residual risk
I'll be straight about this, because most "how I got approved" posts won't: these fixes might not be enough. If the dominant cause really is traffic maturity, a site pulling 150 impressions a day may get rejected again regardless of how good its contact page is. The upside is that I'll have cleaned every fixable signal, so the next review runs on the strongest footing — and if it's still no, the answer is unambiguous: more time, more traffic, more backlinks, not more code.
Lessons
- Measure before you react. "Thin content" is a hypothesis about your site, not a fact. Audit the shipped HTML and count the words before you decide the fix is "write more."
- The label is a catch-all. For a new site, "low value content" often means "too new / not enough traffic / too template-y," none of which is solved by padding word counts.
- Delete the fix the evidence doesn't support. My de-boilerplate pass died on one
grep. Doing nothing there was the correct, disciplined call. - Separate policy hygiene from the actual fix. No ads are live pre-approval, so "ads near edgy content" can't be your rejection reason yet. Don't de-index healthy traffic pages over a worry you can't attribute.
- Reapplications are technically unlimited and practically scarce. Wait for the re-crawl. Burning attempts on an unchanged site actively hurts you.
If you're staring at the same rejection on your own tool site: resist the urge to bury every page in text. Check whether the pages are actually thin first. They probably aren't — and the real work is trust signals, one or two genuinely weak pages, and the patience to let a young domain earn its traffic before you ask Google to monetize it.
I'll update this post after the reapply lands — approved or not.