Skip to main content

HTML SEO audit for Story 39

View Markdown versionEdit this page on GitHub

This audit was performed on 18 October 2026 against commit 2b86ffe and the Story 39 implementation. It evaluates technical search indexing and publication behavior, independently of proprietary ranking scores.

Initial baseline​

The initial assembled production corpus contained 79 documentation pages. The initial audit used parse5 HTML inspection, generated sitemap inspection, Apache configuration inspection and byte measurements. Lighthouse subsequently compared an isolated reconstruction of the unchanged initial commit with the implementation.

SignalInitial resultCorrection
Canonical host79 pages identified the GitHub Pages host in production.Production configuration supplies the official canonical base.
Open Graph identityURLs inherited the same incorrect host.Centralized production identity.
H1All 79 pages had one H1.Preserved and enforced.
Language and descriptionsFrench legal notice incorrectly declared English; descriptions matched source metadata.Source language and description fidelity enforced.
JSON-LDBreadcrumb data present; no centralized site/article classification.Site identity, article and explicit API classification added.
RobotsNo deliberate robots.txt.Crawlable resources and production sitemap announcement.
SitemapGenerated from the incorrect host and provider route list.Inventory-derived canonical documentation entries only.
Alternate HTTP responsesNo Markdown or negotiated response indexing directive.Apache X-Robots-Tag: noindex.
PreproductionNo global HTML noindex policy.Global noindex and empty sitemap.
Social imageNo default sharing image.Reusable PNG card.
Static HTML payload2,143,787 bytes total; largest page 79,293 bytes.No added third-party runtime or network dependency.

The initial static findings were recorded before source changes.

Lighthouse and loading performance​

Lighthouse 13.5.0 with Chrome Headless Shell 155.0.8059.84 audited /index.html using its default mobile simulation. Both initial and final builds were served locally; the initial commit was reconstructed with git archive 2b86ffe in an isolated temporary directory. The static preview comparison isolates application changes; the Apache measurement includes the production transport improvements.

SignalInitial static previewFinal static previewFinal isolated Apache
Advisory performance score7171100
Advisory SEO / accessibility scores100 / 100100 / 100100 / 100
First Contentful Paint4.3 s4.2 s0.9 s
Largest Contentful Paint5.2 s5.2 s1.9 s
Total Blocking Time0 ms0 ms30 ms
Cumulative Layout Shift000
Initial transferred resources847 KiB853 KiB243 KiB

Lighthouse's perfect initial SEO score missed the incorrect canonical host and absent cross-representation indexing policy. Project-defined validation therefore remains the publication specification. The measurements are single local lab runs, not production field Core Web Vitals or a ranking guarantee.

The initial audit identified uncompressed responses and absent cache lifetimes. Production Apache now compresses supported text formats when mod_deflate is available and caches content-hashed JavaScript, CSS and search indexes for one year with immutable. Stable document filenames do not receive that immutable policy. Apache integration tests check real gzip responses and immutable cache headers.

To reproduce, run Lighthouse against the publication server or an isolated Apache serving the generated corpus:

npx lighthouse http://localhost:3093/index.html --only-categories=performance,seo,accessibility --output=json

Use a locally available Chrome executable through CHROME_PATH; this audit downloaded its temporary browser separately. No browser or Lighthouse dependency is introduced into the application or mandatory CI checks.

Final validation​

The complete production and preproduction builds enforce the SEO policy. Mutation tests exercise canonical hosts and suffixes, required metadata, heading hierarchy, language, JSON-LD, sitemap exclusions and environment policy. Apache integration tests verify 1,275 real HTTP responses, including continued representation access and indexing directives. The French notice is now legal-notice.fr.md, with an English translation at legal-notice.en.md. Both representations and translations are included in legal integrity checks and the documentation inventory. All .fr.md pages declare French HTML and article content, while English interface text keeps an explicit English boundary. This corrects the language defect identified during independent review of the initial Story 39 implementation. The former unqualified legal-notice identity is retired as explicitly requested; links now target the language-qualified pages.

Preproduction keeps its own local search index: public search-engine exclusion must not disable user search.

Representative generated JSON-LD is checked with the official Schema.org validator. The root page and a combined sample of generated WebSite, TechArticle, APIReference and breadcrumb data returned zero errors and zero warnings from https://validator.schema.org/validate. The mandatory local gate validates every generated JSON-LD object against the centrally selected metadata and type.

Accepted limitations and operational follow-up​

  • Lab LCP and CLS are recorded above; field INP and field Core Web Vitals were not measured.
  • Lighthouse still flags approximately 11 KiB unused compressed CSS, 55 KiB unused compressed JavaScript and a 280 ms render-blocking opportunity. These originate in the existing Docusaurus/search presentation bundles; broader framework changes are deferred beyond this Story.
  • Production text compression requires Apache mod_filter and mod_deflate; deployments without them remain valid but lose the measured transfer reduction.
  • No third-party font, analytics, structured-data fetch or SEO JavaScript dependency is added to page loads.
  • Development and production builds retain existing Node/Docusaurus tooling warnings; these do not indicate a failed publication gate.
  • Informative image alt text still requires editorial review; an automated check detects missing attributes only.
  • Schema.org article types do not promise Google rich results; Rich Results Test is therefore not used for those types.
  • Test builds use the existing legal fixture helper and must never be deployed. Real publication still requires approved legal configuration.
  • HTTPS host behavior and search-engine indexing can only be confirmed after Alexandre's production deployment.

Submit the production sitemap through Search Console after deployment. No Google account or external validator is required by CI.