Google AdSense has turned this site down four times. The last rejection landed on 10 September 2026, and the reason on the notice was the same as the three before it: low value content. There was no penalty, no manual action, no drama. Just a site that a reviewer looked at and decided was not worth showing ads on.
I could have argued with that. Instead I exported all 100 published posts through the WordPress REST API on 19 September 2026, dropped them into a JSON file, and counted things. Counting is uncomfortable, because the numbers do not care what you meant to build. This post is what the count showed and what I did about it.
Nothing here is a hypothetical about “sites that get penalised”. It is my own site, my own posts, and my own decisions, most of which were bad.
What the export actually showed
Every figure below comes from that one export. I counted with a short Python script over the raw post content, not from memory and not from a plugin dashboard, so anyone with the same export would get the same numbers.
| Counted across the 100 published posts | Result |
|---|---|
| Posts published between 8 June and 24 August 2026 | 100 |
| Posts carrying the publication date 1 July 2026 | 36 |
| Consecutive days from 6 July to 24 August with exactly one post each | 50 |
| Posts containing the string “$1,000/month” | 100 (108 occurrences) |
| Posts containing “passive income” | 100 |
| Posts with a “Frequently asked questions” heading, either capitalisation | 87 |
| Posts with a contextual internal link inside the article body | 0 |
| Posts with a button labelled “Affiliate link” | 29 |
| Posts with fewer than 130 words of article text, promotional boxes excluded | 19 |
| Tags on the site, each attached to exactly one post | 7 |
Mistake one: publishing at a speed no person could keep up
One hundred posts went live between 8 June and 24 August 2026. That is eleven weeks. Thirty-six of them share a single publication date, 1 July, because that was the day I ran a bulk import. Then, from 6 July to 24 August, exactly one post appeared every single day for fifty days without a gap, because I had scheduled them that way.
Look at that pattern from the outside. A domain with no history produces thirty-six articles in one afternoon and then hits its daily quota for seven straight weeks, weekends included, never early, never late, never skipping. No writer works like that. Google’s spam policies have a name for the general shape of this, scaled content abuse, and the point of the policy is not the tool used but the absence of anything added for the reader.
The honest version of what happened: I had the drafts, publishing them cost nothing, so I published them. The rate was set by how fast I could generate, not by how fast I could check anything. That is the whole mistake in one sentence.
Mistake two: the same skeleton bolted onto every post
Eighty-seven of the hundred posts carried a heading called “Frequently asked questions”, in one of two capitalisations depending on which batch produced them. Fifty-seven closed with a heading called “Final thoughts”. Thirty had a “Table of Contents” that was not a table of contents at all, just a paragraph listing the headings that came next. Thirty-six had a section called “Common mistakes to avoid”, which is a fine section to have once and absurd to have thirty-six times on one site.
The questions in those FAQ blocks were the tell. Nobody had asked them. They were generated to fill the slot the template demanded, so they came out as things like “Why do internal links matter?” with a two-line answer that repeated the section above it. A reader who scrolled two articles on this site saw the same furniture arranged the same way and correctly concluded there was one machine behind all of it.
The fix is not to ban question sections. It is to only write one when somebody has actually asked, which on a site with the traffic this one has means almost never. Every post I rewrite now gets the structure its own subject needs, and I check the running list of headings across the site to make sure two posts are not converging on the same shape.
Mistake three: a number I had no business printing
The string “$1,000/month” appeared 108 times across the site, and there was at least one instance in every single one of the hundred posts, because it sat in a promotional box that the template pasted into each article. “Passive income” also appeared in all one hundred.
I have never earned a thousand dollars a month from this blog. I have never earned anything from it: at the time of writing the AdSense account has never served an ad here and I am not approved for a single affiliate programme. So the most repeated claim on the entire site was a figure with nothing behind it, printed next to a button. Google’s publisher policies treat misrepresenting the content or the publisher as a violation on its own, and they give get-rich-quick schemes as an example of a deceptive claim. I was not trying to run a scheme. I ran one anyway, by copy-paste.
Every one of those 108 instances is gone, along with the boxes that carried them. The rule I now work to is blunt: no income figure appears on this site unless it is mine, dated, and something I could show. Right now that means no income figures at all. If you want the longer version of how a small site can and cannot make money, that is the subject of what actually happens when a small blog tries to make money, written under the same rule.
Mistake four: buttons labelled “Affiliate link” that were not affiliate links
Twenty-nine posts contained a button or label reading “Affiliate link”. None of them carried an affiliate ID, because there was no affiliate account behind them. They pointed at manufacturers’ home pages. A reader clicking one got a plain link to a company’s front door, dressed up to look like a commercial recommendation.
That is worse than useless in both directions. It tells the reader the recommendation is paid when it is not, and it tells a reviewer that the site’s main purpose is monetisation rather than information. It is also exactly the “thin affiliation” shape that search documentation warns about: a page whose value proposition is the link rather than anything on the page.
Every one of those labels is removed. The rule now: while I am not in any programme, links to providers carry rel="nofollow" and no tracking parameters, and no disclosure appears anywhere, because there is nothing to disclose. The day I join a programme, that link gets rel="sponsored nofollow" and a disclosure next to it, not in the footer. I wrote up the rest of that clean-up in the affiliate mistakes I made on this blog and how I fixed them.
Mistake five: a hundred posts that pointed at nothing
This is the number that embarrassed me most. Across 100 posts there were zero internal links inside the body of an article. Not few. Zero.
Forty-three posts did have a “Related Articles” strip underneath, three links each, anchored on the target’s title and placed after a promotional box, which is where readers have already stopped reading. The other fifty-seven had nothing at all. On top of that, the site had seven tags, each attached to exactly one post, and all seven had been generated from a single article. That is not a taxonomy. It is decoration that produces seven near-empty pages for a crawler to find.
Fixing this properly turned out to be its own project, and I documented it separately in how I mapped a hundred posts into clusters and linked them by hand, including the part where the model’s proposed link map was confidently wrong.
The sentence I deleted from this post
The previous version of this article opened by telling you that Google’s March 2024 core update “deindexed hundreds of sites overnight” and that post-mortems found the same handful of mistakes at nearly every casualty. It sounded authoritative. I had no source for it, I had not read any such post-mortem, and I have no way to verify the number of sites involved or what happened to them.
So it is gone, and I am pointing at its absence on purpose, because this is the mistake underneath all the others. A language model will hand you a confident, well-shaped, plausible sentence about an event you did not witness, and it costs nothing to leave it in. One unverifiable claim in an opening paragraph does more damage to a reviewer’s impression than a hundred dull but checkable ones. My working rule now: if I cannot name where a claim came from and when I checked it, it does not get published, even if it is probably true.
The same logic applies to any statistic in a draft. I now go through drafts hunting specifically for numbers with no citation attached, which is the fastest quality pass I know. More on the drafting process in how I write with AI without publishing filler.
What I actually changed
- Seventy-five of the hundred posts come down. Sixty-four of them get a 301 to the guide that absorbs what was worth keeping; eleven that have no honest equivalent return 410 instead of being redirected somewhere vaguely related.
- The nineteen posts with fewer than 130 words of article went back to draft, and the three worth keeping were rewritten from scratch. A 120-word article with an FAQ bolted on is not a short article, it is a placeholder.
- Every promotional box, income figure and fake affiliate label is out of the content, not hidden behind a plugin toggle.
- The seven single-post tags are deleted and kept out of the sitemap.
- Every surviving post gets three to five contextual internal links written into the prose, with anchors that describe the destination.
- There is now a named author with a real profile page and an editorial policy that says plainly where AI is used and where it is not. This site is written with a language model in the loop. Pretending otherwise was never an option; pretending there was a team of testers behind it was the actual offence.
- Publishing goes back to two or three finished posts a week. Not fifty scheduled drips.
What I cannot show you yet
Here is the part most posts of this kind skip. I do not have a recovery story. Over the three months to 19 September 2026, Search Console reported 15 clicks for this site at an average position of 67. Sixty-seven is page seven. The hundred posts were not competing and losing; they were never in the race.
So I cannot tell you that any of this worked. The rewrite is still going on, a few posts a week, and I will not request another AdSense review until Search Console shows the changed pages have been recrawled, which realistically means weeks. When there is an outcome, good or bad, it goes in an update on this post with the date on it.
What I am reasonably confident about is the diagnosis, because it did not come from a theory about algorithms. It came from counting my own pages: 108 income claims, 87 identical question blocks, zero internal links, 36 posts in one day. You can run the same count on your own site in ten minutes through the REST API, and I would suggest doing it before you publish anything else. The first step of getting anything out of search is much duller than most advice admits, and I walk through mine in the launch checklist I actually run on my own sites.
