Static-site SEO fundamentals: sitemap, internal links, and crawl speed — measured
Many publishers treat SEO as arcane. For small and mid-sized static sites, ninety percent of the benefit comes from a handful of unglamorous fundamentals. We ran controlled observations across three sites; this post covers only what proved effective, with a verification method for each move.
One: a sitemap isn't done when it's generated
Two classic mistakes: missing file extensions (sitemap says /article/foo, the real page is /article/foo.html), and URLs that 404. The former wastes crawl budget; the latter actively lowers site trust.
Verification: a ten-line script that walks every <loc>, requests each URL, and logs the status code. Everything non-200 gets removed. One audit of ours found sixty dead addresses hiding in a live sitemap.
Two: internal links determine crawl depth
Crawlers walk outward from the homepage. Pages more than three clicks deep see sharply lower indexing probability. We added three link placements to every detail page: breadcrumbs (home → section → article), a "related reading" block (3–5 same-section posts), and section entries on the homepage. Within two weeks, indexing of deep pages rose from about 40% to above 90%.
Verification: spot-check deep pages with site:yourdomain.
Three: invite the crawler — Search Console and IndexNow
After publishing, don't wait. Submit new URLs through Search Console's URL inspection to request indexing — free and the fastest channel we've measured. Sites with steady cadence can also adopt the IndexNow protocol to push updates to multiple engines at once.
Verification: watch the "Discovered – currently indexed" movement in Search Console's pages report within 48 hours of submission.
Four: structured data for better-looking snippets
Add Article JSON-LD (title, dates, author, image) to articles and SoftwareApplication or FAQPage to tool pages. It doesn't directly raise rankings, but richer result presentation lifts CTR, which in turn supports rankings.
Verification: validate each template in Google's Rich Results Test; ship only with zero errors and warnings.
Five: response and cache headers
The most neglected static-site basics: long-lived Cache-Control for CSS/JS with versioned filenames to bust caches; no-cache for HTML so updates apply immediately. Enabling gzip or Brotli typically cuts text payloads by ~70%.
Verification: curl -I for headers; PageSpeed Insights for first-paint metrics. Our homepage LCP dropped from 2.8s to 1.2s with compression and caching alone.
Make the five moves a release process
Finally, fold them into every release: verify sitemap liveness → link every new page from at least two places → push indexing → validate structured data → spot-check headers. SEO compounding comes from never dropping the ball on any release, not from one big gesture.