[ Blog ]

Notes from the data.

What we're learning as we run causal attribution on real engineering teams.

2026-07-02 · 10 min read

Discovered – currently not indexed: what it means and how to fix it

Google knows your URL exists and has chosen not to fetch it. It is not an error, and on a small site it is almost never the "crawl budget" problem the guides tell you to fix — it is crawl demand. What the status actually means, why our own posts sat in it, and the structural fixes that ship in a pull request.

Read post
2026-06-18 · 6 min read

Next.js SEO: the deploy-level changes that move rankings

A client-only SPA fails SEO loudly — the crawler gets an empty shell. Next.js fails it quietly: it renders on the server by default, so a one-line diff can flip a whole route subtree to dynamic, delete a page's metadata, or push its tags out of Google's first crawl — with no error and no failing test. The deploy-level regressions to check by sight.

Read post
2026-06-18 · 6 min read

SEO A/B testing for developers

You can A/B test a checkout flow by splitting users. You cannot test an SEO change the same way — the visitor you are optimizing for is Googlebot, and splitting it by request is cloaking. Real SEO split testing randomizes pages, not users, and measures the result against a forecast counterfactual. How it works, and when you cannot run one at all.

Read post
2026-06-17 · 6 min read

Shipping JSON-LD structured data from your codebase

Structured data is the rare SEO task that belongs to engineers — it ships with your build. But it is an eligibility signal, not a ranking boost, and Google has been retiring rich-result types, not adding them. What JSON-LD actually buys you in 2026, and how to generate it from your app so it never drifts out of sync.

Read post
2026-06-16 · 6 min read

Technical SEO for React and Vite SPAs Googlebot actually rewards

Googlebot runs JavaScript — but "can render" and "reliably indexes" are different promises, and the gap is where a React SPA leaks traffic. The two-wave indexing pipeline, why dynamic rendering is dead, and the SPA-specific mistakes (hash routing, soft 404s, onClick nav) that silently tank rankings.

Read post
2026-06-15 · 6 min read

How to tell if your last deploy hurt your SEO

Traffic dipped a few days after you shipped. Was it your deploy, a Google update, or the weekend? Read impressions, position, and clicks together — only one pattern points at your code — then rule out the short list of deploy-level regressions that actually tank rankings.

Read post
2026-06-14 · 6 min read

Do Core Web Vitals actually move your ranking?

Yes — but as a conditional signal that decides positions among pages already close on relevance, measured on your slowest quarter of real users over a rolling month. Here is what Google actually said, and why a performance fix takes six to eight weeks to show up.

Read post
2026-06-04 · 7 min read

How long does it take Google to notice website changes?

Typically 3 days to 3 weeks — Google has to re-crawl, re-index, and re-rank, in that order. In the one deploy we measured end-to-end, rankings moved 16 days after the PR merged. Why the lag exists, what makes yours longer or shorter, and how to shorten the front of it.

Read post
2026-05-27 · 7 min read

Case study: ganttchart.ai

A real changepoint. A 25-position overnight shift. And the one pull request, out of twelve candidates, that our system pointed at — before any of us thought to look.

Read post