Case study

Case Study: We Scored 42/100 on Our Own SEO Audit

Yousef Hosseini9 min read

Founder, OrganicRank. Builds the crawler, the scoring and the fix pipeline described in these posts. Every claim here is one you can reproduce on your own domain.

Publishing a case study about your own failure is uncomfortable, and it is the only kind worth reading. We sell an SEO audit. We scored 42 out of 100 on it. Here is every finding, including the one that was actively removing us from Google.

The short version

  • organicrank.ai scored 42/100 on its own audit, with six findings including one critical.
  • The worst was self-inflicted: robots.txt advertised our sitemap at http://localhost:3000/sitemap.xml, which tells Google the sitemap does not exist.
  • The cause was a build-time variable inlining a developer's local environment into production - a class of bug no amount of SEO knowledge prevents.
  • All six were fixed and re-verified to 100/100 with zero issues in a single session. You can re-run the same audit on us and check.

What did the audit find?

Six findings: one critical indexability fault, one high-severity content gap, and four medium issues spanning sitemap quality, missing canonicals, thin pages and sparse internal linking. Health score 42/100.

Not on that list, because our own checker did not flag it as a scored issue, was the worst problem on the site. We only caught it by reading the raw crawl output.

organicrank.ai, first audit
SeverityFindingEvidence
CriticalCrawled page carrying a noindex directive/dashboard was linked in the header nav
HighNo editorial or content section detectedNo guide or resource URLs in the sitemap
MediumSitemap only lists 5 URLsAnd several were fragment links, not pages
MediumCanonical tags missing on most pages2 of 2 crawled pages had no rel=canonical
MediumPage under 300 words of body copy/dashboard, 81 words
MediumSparse internal linkingAverage 2.0 internal links per page
organicrank.ai, first audit - Produced by the same free audit anyone can run on their own domain.

What was the bug that mattered most?

Our robots.txt told Google the sitemap lived at http://localhost:3000/sitemap.xml. Every crawler that read it was pointed at a machine on a developer's desk. Effectively we had no sitemap at all.

The cause is worth explaining because it is not an SEO mistake - it is an engineering one with SEO consequences, which is the most common kind. In Next.js, environment variables prefixed NEXT_PUBLIC_ are inlined into the bundle at build time. Our robots.txt route read NEXT_PUBLIC_APP_URL to construct the sitemap location. On a developer machine that variable is http://localhost:3000. The value was baked into the production build.

Nothing about this is visible in a browser. The site looked perfect. Every page rendered, every link worked, and the one file whose entire purpose is to talk to crawlers was quietly lying to them.

The same root cause had already produced a second bug we had fixed days earlier, where OAuth callbacks and post-checkout redirects pointed at localhost in production. Same mechanism, different symptom.

What did we change?

Six technical fixes and one content build. The technical work took under an hour; the content - nine guides, roughly 9,000 words - was the bulk of the session.

  1. 1Made the site origin a constant rather than a build-time variable, so no environment can leak into production metadata again.
  2. 2Rebuilt the sitemap to list only canonical, indexable pages - the old one contained fragment URLs like /#pricing, which are not pages and teach crawlers to distrust the file.
  3. 3Added self-referencing canonical tags across every page.
  4. 4Excluded /dashboard and /progress from crawling in robots.txt rather than only noindexing them, so a young domain does not spend crawl budget on pages that can never rank.
  5. 5Added sitewide robots directives, an Open Graph card and a favicon.
  6. 6Built a nine-guide content cluster targeting the queries the site should own, interlinked with the homepage and footer.
  7. 7Lengthened one page title that fell under the 25-character threshold.

What was the result?

100/100 with zero issues, verified by re-running the same audit against the live site in production. Crawled pages went from 2 to 8, and the sitemap from 5 entries to 11 real pages.

One honest caveat, because a case study without one is marketing. 100/100 is the technical and on-page half. It does not mean we rank - the domain is new and has very few referring domains, and no on-page work substitutes for authority. What it means is that nothing technical is standing between our content and the index, which is the precondition for everything else rather than a result in itself.

Before and after, measured by the same crawler
MetricBeforeAfter
Health score42/100100/100
Open findings60
Critical findings10
Indexable pages crawled28
Sitemap entries5 (some fragments)11 real pages
robots.txt sitemap targetlocalhost:3000https://organicrank.ai/sitemap.xml
Pages with a canonical tag0All
Before and after, measured by the same crawler - Both figures produced by the free audit at organicrank.ai. Run it on us and you should reproduce the second column.

What is the transferable lesson?

The faults that cost the most are invisible in a browser and introduced by deployments, not by bad SEO decisions. That makes crawl frequency, not crawl depth, the variable that protects you.

We knew SEO well enough to build a product around it and still shipped a robots.txt pointing at localhost. Not through ignorance - through the ordinary mechanics of a build system doing exactly what it was configured to do. Expertise does not prevent this class of bug. Measurement does.

If our audit had been running nightly from the first deploy, that fault would have surfaced the next morning instead of surviving until we thought to check. That is the entire argument for continuous measurement over periodic auditing, and we are the case study for it.

Frequently asked questions

Can I verify these numbers?

Yes, and please do. Run the free audit on organicrank.ai and you should get 100/100 with zero findings. The before figures are from our first run; the after figures are reproducible right now.

How long did the whole thing take?

The six technical fixes took under an hour. The nine-guide content cluster took the remainder of a working session. The technical half is the part that generalises - most sites' fix lists are similarly small once ranked by consequence.

Does a perfect score mean you will rank?

No, and we would distrust anyone who said otherwise. It means no technical fault is blocking you. Authority still has to be earned, and that takes months of links rather than an afternoon of fixes.

Find out what your own audit says

Same crawler, same checks, same scoring. Free, and the findings are on screen before we ask you for anything.

Try:

No account needed to see your findings. Boosting plans start at $149/month.

Read next