Your single-page app is invisible to the systems answering questions about you

By on

Diagonal rule lines on a blueprint grid

We measured what a crawler without JavaScript could read from this site. Every article came back as zero words. Google was fine. Everything else was reading a blank page.

This site was a client-rendered React application with one HTML file and an empty mount point. Search was fine, because Google renders JavaScript. Then I fetched an article the way a crawler that does not run scripts fetches it, stripped the tags and counted the words. Zero.

Twenty-five articles, all of them substantial, all of them returning an empty document to anything that reads HTML without executing it. That includes most of the systems now grounding answers and recommendations.

The metadata was never the problem

We already prerendered per-post titles, descriptions and social images, because share cards break loudly and somebody complains. Body content breaks silently. Nobody reports that an assistant failed to cite you.

So the site looked well optimised by every check we were running. The checks were reading the head.

The fix was smaller than expected

The build already generated one HTML file per post to carry the metadata. Rendering the article body into the mount point in that same step was an afternoon. React replaces the container's children when it mounts, so the static version is a pre-render rather than a duplicate. What a crawler reads is what a person sees.

  • Home page: 0 words before, 146 after.
  • Article pages: 0 words before, 480 to 500 after.
  • Journal index: 0 words before, the full list of posts and excerpts after.

No framework change, no server-side rendering runtime, no new dependency. The content already existed as structured data at build time, which is the part that made it cheap.

How to check yours in one minute

Fetch your most important page with a plain HTTP client, no browser. Strip the tags. Count the words. If the number is near zero, every system that does not run a rendering engine sees nothing, and you will never get a complaint about it.

The disclosure obligations and the structured data and the plain-text summaries all assume there is text on the page to describe. It is worth confirming that assumption before optimising anything built on top of it.

Tags: engineering, ai, process