{
"$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
}
]
}