
Website SEO audit report with tabs for full report, robots, sitemap, and pages
I spent months writing blog posts, tuning titles, and watching Search Console tick up. Eight months ago I shipped a small Nuxt config change and accidentally turned SSR off for the public site. I did not notice. The app still looked fine in Chrome every time I opened it.
I only found out much later, on Reddit, in a thread about a free website SEO audit. I dropped my URL in a comment. Someone ran it and sent back a devastating analysis. Empty pages. Missing titles. A sitemap advertising routes crawlers could not read. Eight months of SEO leverage, gone, and I had no idea until a stranger on the internet pasted the report.
If you run the site on a modern JS framework, this is the class of mistake that hurts. No penalty, no hack. Just a config line you forgot to revert.
It is especially relevant if you are like me: a technical SaaS founder who can ship features all day but is not naturally great at marketing or SEO. You trust that the site works because you built it. You skim Search Console when you remember. You assume the next blog post or landing page tweak will move the needle. Meanwhile a deploy from months ago quietly removed you from the index.
Quick answer: Crawlers read the raw HTML, not your browser. If SSR is off, many of them see an empty shell. A free audit is at /tools/website-seo-audit.
TheFluxTrain is a Nuxt app hosted on Firebase. Marketing pages, the blog, and free tools are supposed to be served as static HTML so crawlers get titles, meta tags, and body copy in the first response. Logged-in app areas like Flow Studio and the dashboard are client-only on purpose. That split is normal.
I flipped SSR off globally during a refactor. I meant to limit it to app shells. I did not. Every public URL started returning a thin HTML document with a JavaScript bundle attached. My browser ran the bundle and painted the full page. Googlebot often does not. It fetches raw HTML, like our SEO audit tool does.
Search Console did not scream the next morning. Impressions drifted down over weeks, but I assumed content competition and kept shipping features. I never fetched a URL as Googlebot myself. Months passed.
The wake-up call was that Reddit thread. I posted my site URL. A stranger ran a crawl check and replied with the kind of report that makes your stomach drop. Pages with almost no text in the raw HTML. Public routes that looked broken to crawlers. I turned SSR back on and fixed the route rules.
It has only been five days since the fix. I am not claiming a full recovery yet. What I do see in Google Search Console is stable impressions, ticking up slightly. Early, but better than the slow drift I had been ignoring. The quiet months in between are still gone.
Note: If your site "works fine" when you open it yourself, that is not proof SEO is fine. You are not Googlebot.
Nuxt 4 on Firebase for the frontend. FastAPI (Python) for the backend. Markdown blog, prerendered sitemap, robots.txt in public/. Public routes get static HTML; app shells like /flow-studio and /dashboard stay client-only.
SPA shells with no server HTML. A robots.txt block on pages you still link. Broken sitemap. Private routes listed in the sitemap. Missing title, meta, or canonical. Googlebot and Bingbot seeing different HTML.
Paste your URL into the Website SEO audit. It crawls robots.txt, your sitemap, and up to 200 pages as Googlebot and Bingbot, without running JavaScript. Skim the report, then share it with whoever owns deploys, or paste it into Claude if you want a second read.

Robots, sitemap, and per-page tabs in one report.
I had a small SEO debug script already. After the Reddit audit I turned it into that free tool so others do not need a stranger in a comment thread.
The server sends finished HTML on the first request. Crawlers read that without running your client bundle. Client-only public pages often ship little or no text to index.
No. Raw HTML only, like many crawlers.
Yes. No login.
Fix critical items first. SSR and route rules are worth a second pair of eyes before the next deploy.
Questions? @saquiboye