There is a class of website failure that produces no error message, no broken layout, and no alarm in any dashboard — and a popular React SEO library shipped one to npm in March 2026. If your site was built or updated by an AI coding tool since then, there is a real chance every page is presenting to Google and AI engines with your homepage's title and none of its own schema.
We know because it happened to brandinglab.io. We sell AEO. Here is the bug, the ten-second check, and the fix.
What is the react-helmet-async v3 bug?
react-helmet-async v3.0.0 — a release that appeared in March 2026 after roughly two years of project abandonment — can fail to apply head tags at all: no page titles, no meta descriptions, no canonicals, no JSON-LD, with zero errors thrown. The library loads, the page renders, and the head-management layer silently does nothing.
The backstory explains how a broken major ends up on npm. react-helmet-async's last stable release, v2.0.5, shipped in December 2023. When React 19 arrived in December 2024 it broke the library, issues piled up with no maintainer response, and in February 2025 the community forked it as @dr.pogodin/react-helmet — the fork's own documentation describes the original as "unmaintained and stale". Then, in March 2026, the absent maintainer abruptly published v3.0.0. The fork maintainer's assessment: v3 broke core behaviour — it stopped deduplicating tags and dropped features.
What we verified on our own React 18 site was a different, quieter symptom of the same release: the library no-opped entirely. Zero managed tags in the head. Whether your symptom is duplication or silence, the input is the same — a broken major on npm, wearing the name of a package that ten thousand tutorials still recommend.
Why are AI-built websites hit hardest?
AI coding agents install "latest" by default, and since March 2026 "latest" is the broken version. Ask Lovable, Cursor, v0 or Bolt to "add SEO to my React site" and the standard playbook is npm i react-helmet-async — no version pin, no glance at the issue tracker, no awareness that the informed part of the ecosystem quietly migrated to a fork a year before the broken release landed.
That is exactly how it entered our build: an unpinned install, run by an agent, during a routine SEO improvement. Installed four months earlier it would have resolved to working v2.0.5. Installed in July, it resolved to v3.
A human developer who follows the React ecosystem might have known. An agent executing an install command does not read GitHub issues — and the population of sites built this way is precisely the population least likely to have anyone checking DevTools afterwards.
Why doesn't anything catch it?
Every standard check passes, which is what makes this failure dangerous rather than merely annoying. The page renders perfectly — users see nothing wrong. The console shows no errors — the library fails silently by design of its failure, not by anyone's intent. Googlebot renders JavaScript and still indexes the pages, so rankings don't collapse overnight; they erode. And Google's Rich Results Test can come back green: ours did, because valid sitewide organisation schema in the static HTML masked the dead per-page layer. One valid item detected — and no tool that tells you it should have been three.
We ran with this for weeks. Every theory chased the delivery layer — crawlers, prerendering, hosting — because that is where SEO problems usually live. The actual failure was one layer up, and the test that found it takes ten seconds. The full investigation, method and findings are in what an AEO audit actually looks like.
How do I check my site in ten seconds?
Open any inner page of your site — an article, a service page, anything that is not the homepage — press F12, and type document.title into the console. If it returns your homepage's title, your head-management layer is not running, and everything it was supposed to manage — descriptions, canonicals, OG tags, article schema — is missing with it.
Two follow-up checks confirm it. Search your page source for data-rh — react-helmet-async marks every tag it manages with that attribute, so zero matches means the library is doing nothing. Then view source (not DevTools — actual view-source) and check whether your body contains your content at all: if it's a near-empty div, non-JS crawlers like GPTBot and ClaudeBot see nothing regardless, which is the SPA invisibility problem compounding the head problem.
What is the fix?
You have three options, in ascending order of robustness. Pin the library back to v2.0.5, the last stable release — smallest change, still leaves you on an unmaintained package. Switch to the maintained fork, @dr.pogodin/react-helmet, whose v2 line is a drop-in replacement. Or do what we did: remove the dependency entirely and replace it with a small native head manager — with React 18-19, document.title and a few createElement calls in a useEffect need no library at all, and a dependency that cannot exist cannot silently break.
Whichever you choose, verify the same way you diagnosed: document.title must change per page, and your managed tags must be present in the head. Then check the second layer — that your prerendered or server-rendered HTML carries those tags for non-JS crawlers, because a head manager that only works after JavaScript executes only fixes half the audience.
And pin your dependencies. The unpinned install is what turned an ecosystem problem into our problem.
The wider lesson for AI-era teams
The uncomfortable truth is that this bug's natural habitat is the AI-built web, and its population is growing. Sites shipped by agents, checked by humans who look at the rendered page, validated by tools that confirm what exists rather than what's missing — every layer of that stack waves this failure through. The number of sites currently serving their homepage title on every page is unknowable, but the mechanism that creates them runs thousands of times a day.
The defence isn't avoiding AI tools — we build with them daily. It's adding the one discipline agents don't have: verifying what machines receive, on a schedule, at every layer. That discipline is a large part of what AEO actually is in practice.
If you want us to run that check against your site — the head layer, the raw HTML, the schema that should exist and doesn't — get a free AEO audit. It catches this bug in the first pass, because since July, checking for it is a standing item on our list.