{ "$schema": "./redirect-map.schema.json", "version": 1, "_README": [ "Maps legacy single-volume mlsysbook.ai URLs to the new ecosystem URLs", "introduced by the staged rollout. Used by shared/scripts/build-redirects.py", "to emit per-path HTML stubs into the gh-pages root. Each stub does:", " ", " ", "plus a noindex hint so search engines drop the legacy URL after a crawl.", "", "Why HTML stubs and not real 301s? GitHub Pages does not support server-", "side redirects. Meta-refresh + canonical is the closest accepted", "Google-friendly fallback (preserves PageRank within ~24h of recrawl).", "If we ever migrate off Pages (Cloudflare Pages, Netlify, S3+CF), the", "build-redirects.py script also emits a `_redirects` file in the standard", "Netlify format so the same map drives real 301s on day one.", "", "Conventions:", " - 'from' is a path under mlsysbook.ai (always starts with '/')", " - 'to' is a full URL OR a path; relative paths resolve against root", " - 'status' defaults to 301 (permanent). Use 302 only for known-", " temporary moves that may flip back.", " - Patterns use '*' as a literal wildcard for trailing path segments.", " The generator expands these against the gh-pages tree.", "", "This file ships intentionally minimal. Populate as the legacy URL", "inventory is finalized — the legacy mlsysbook.ai sitemap is the right", "starting input." ], "redirects": [ { "from": "/contents/core/introduction/introduction.html", "to": "/book/vol1/contents/core/introduction/introduction.html", "status": 301, "note": "Top-of-funnel chapter, highest priority for SEO continuity" }, { "from": "/contents/core/ml_systems/ml_systems.html", "to": "/book/vol1/contents/core/ml_systems/ml_systems.html", "status": 301 }, { "from": "/contents/parts/foundations.html", "to": "/book/vol1/contents/parts/foundations.html", "status": 301 }, { "from": "/contents/labs/*", "to": "/labs/*", "status": 301, "note": "Labs were originally book-embedded; now their own subsite" }, { "from": "/contents/frontmatter/about/*", "to": "/about/*", "status": 301 }, { "from": "/contents/frontmatter/community/*", "to": "/community/*", "status": 301 }, { "from": "/community.html", "to": "/community/", "status": 301 } ] }