A Practical SEO Guide, Part 5: Verify & Iterate

Everything in the first four parts is worthless if it didn't actually ship, or if it silently breaks three deploys later. This final part is about closing the loop: proving each fix is live, wiring up the tools that tell you the truth, and avoiding the regressions that quietly poison an index.

Verify from the outside, the way a crawler sees you

The most reliable check is raw HTTP against production — not your devtools, not localhost. curl is the whole toolkit. This is exactly how I confirmed the portfolio site's pass landed:

# robots + sitemap resolve
curl -s -o /dev/null -w '%{http_code}\n' https://cv.lans.cloud/robots.txt   # 200
curl -s -o /dev/null -w '%{http_code}\n' https://cv.lans.cloud/sitemap.xml  # 200

# structured data + canonical are in the HTML
curl -s https://cv.lans.cloud/ | grep -o '"@type":"[A-Za-z]*"'
# "@type":"Person"  "@type":"WebSite"  ...
curl -s https://cv.lans.cloud/ | grep -o 'rel="canonical"[^>]*'

# the OG image renders as real bytes
curl -s -o /dev/null -w 'status=%{http_code} type=%{content_type}\n' \
  https://cv.lans.cloud/opengraph-image                                    # image/png

Turn the few that matter into a script and run it after every deploy. A 30-second smoke test beats discovering in Search Console six weeks later that a refactor dropped your JSON-LD.

Register with the search engines' own tools

The single most valuable thing you can do after shipping: connect the property to the tools that show you their view of your site.

  • Google Search Console — verify the property, submit your sitemap, and watch the Coverage/Pages report. It tells you what's indexed, what's excluded and why, and surfaces crawl errors you'd never otherwise see.
  • Bing Webmaster Tools — same idea; also feeds DuckDuckGo. Free, five minutes.

Then validate the rich stuff with the purpose-built checkers:

  • Rich Results Test — paste a URL, confirm your JSON-LD parses and is eligible.
  • opengraph.xyz or the LinkedIn Post Inspector — preview your social card before you share it for real.

Watch out for soft 404s

Here's a subtle index-poisoner. When someone hits a deleted or mistyped URL, what does your site return? If it's a 302 redirect to a /404 page — or worse, a 200 with "not found" text — crawlers conclude that every dead URL on your site is a live page. Deleted content never drops out of the index, and your crawl budget gets burned on ghosts.

The fix is to return an actual 404 status code for missing pages:

curl -s -o /dev/null -w '%{http_code}\n' https://your-site.com/this-does-not-exist
# must be 404 — not 200, not 302

Same discipline for noindex: a robots.txt Disallow stops crawling but doesn't reliably remove a page from the index. If you want a page out, serve a real meta tag on the page itself:

<meta name="robots" content="noindex, follow" />

Treat SEO as a regression surface

The reason SEO rots is that it's invisible in normal development — nothing errors when your sitemap goes stale or a deploy strips your canonical tag. So make it visible:

  • Keep an audit trail. Write down what you changed and why. When rankings move (up or down), you want a changelog to correlate against.
  • Add the smoke test to CI or a post-deploy hook, so a missing sitemap fails loudly instead of silently.
  • Re-audit periodically — quarterly is plenty for most sites. Frameworks change defaults, dependencies shift, and content drifts (a stale keyword referencing a tech you removed two years ago is a real thing I've found in my own metadata).

The whole series in one breath

  1. Make it crawlable — content in the HTML, semantic tags, clean headings.
  2. Hand over a map — robots.txt, sitemap, canonical URLs.
  3. Make it understood and shareable — JSON-LD and Open Graph.
  4. Make it fast — self-hosted fonts, sized images, less JS.
  5. Verify and don't regress — curl checks, Search Console, real 404s.

None of it is arcane. Most of it is additive markup and config you can ship in an afternoon. The hard part isn't difficulty — it's that it's invisible, so it never makes the sprint. Do it once, script the verification, and it keeps paying out.


This series grew out of a real SEO pass on cv.lans.cloud. If you want the case-study version of a similar overhaul on this very blog — including the self-drawing social cards — see From Invisible to Indexed.