Our store had 139 product pages. Google saw none of them.
Every page returned a healthy 200. The sitemap was submitted and accepted. Search Console reported no errors. And across 90 days, those 139 pages earned exactly zero search impressions between them.
The symptom nobody flags
This was our own store — a bridal studio whose catalog we built and run. The site looked perfect in a browser. Dresses loaded, filters worked, photos rendered. Nothing in any dashboard said a word was wrong.
The tell only shows up if you ask a specific question: not “is the page indexed,” but “has this page ever earned a single impression?” We pulled every product URL and checked. All 139 came back at zero. Not low. Zero. A page that ranks badly still gets impressions. Zero means Google is not treating it as a page about anything.
What was actually being served
The storefront was a single page application. A browser loads a near-empty shell, then JavaScript fetches the dress and paints it. Humans never notice, because the paint happens in milliseconds.
We fetched a product URL the way a crawler does — no JavaScript — and got back a body of roughly 105 characters. No dress name, no designer, no price band, no description, no structured data. Every one of those 139 pages was serving the same near-empty shell. From Google’s side, we had published 139 identical blank pages and asked it to rank them.
The second problem, hiding behind the first
Rendering was not the whole story. The catalog hub and every designer page had no inbound internal links at all. They existed in the sitemap and nowhere else. A sitemap is a suggestion; internal links are how a crawler actually decides what matters. We had built a storefront with no doors into it.
The fix, and how fast it showed
Two changes. Render the product pages on the server, so the crawler receives the full page — name, designer, description, images, and Product structured data — without executing anything. Then wire the internal crawl path so the hub, the designer pages, and the individual gowns link to each other the way a shopper would move between them.
Within 48 hours the first gown pages were appearing in search results on page one for real queries. After 90 days of absolute silence. We did not write a single new word of content, buy a single link, or touch a single keyword.
What we would check on your site
- Fetch a product page without JavaScript. If the body comes back nearly empty, your crawler experience is nothing like your customer experience.
- Ask for impressions, not indexing. “Indexed” is a much lower bar than “has ever been shown to anyone.” Query the pages that make you money and look for zeros.
- Count the internal links pointing at your money pages. If the answer is zero, being in the sitemap will not save them.
- Distrust green dashboards. Every status code here was 200. Every report was clean. The failure was invisible to every tool that was not asked the right question.
Why we are telling you this
We shipped the bug. It sat in production on our own store for months while we spent money sending traffic to a catalog search engines could not read. The reason we caught it is that we own the whole stack — the site, the platform, and the analytics — so we could ask a question no dashboard was offering to answer.
That is the real argument for owning your software instead of renting it. Not features. The ability to look.