[{"data":1,"prerenderedAt":190},["ShallowReactive",2],{"hub:topics":3},{"path":4,"key":5,"title":6,"h1":7,"description":8,"crumbs":9,"blocks":15},"\u002Ftopics\u002F","topics","All Topics: Static Sites in Production","Every topic, by section","Every topic on the site grouped into its three sections, with guide counts per topic and the mix of how-tos, concepts, fixes and comparisons in each.",[10,13],[11,12],"Home","\u002F",[14,4],"Topics",[16,19,21,24,83,85,133,135],{"k":17,"text":18},"p","The site is organised around three decisions every static site makes, in the order it makes them: which generator to build with, how to make the result fast, and how to ship and operate it. Each section below is one of those decisions, and each topic inside it is a problem area with its own set of guides — from an overview that frames the trade-offs to how-tos, fixes and comparisons with measured numbers.",{"k":17,"text":20},"Topics are the browse spine. A topic page gathers everything about one subject regardless of the kind of help it offers, so the quickest way into an unfamiliar area is its topic page, read top to bottom. If you already know the product you are working with, the tool pages cut across all three sections instead; and if you know exactly what you are looking for, search is faster than either.",{"k":22,"html":23},"fig","\u003Cfigure>\n\u003Csvg viewBox=\"0 0 760 138\" role=\"img\" aria-labelledby=\"hub-topics-hero-title hub-topics-hero-desc\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n  \u003Ctitle id=\"hub-topics-hero-title\">How the three sections of the site relate\u003C\u002Ftitle>\n  \u003Cdesc id=\"hub-topics-hero-desc\">Three stages in order. Choose a generator, covering selection, docs frameworks, search, languages and SEO. Make it fast, covering Core Web Vitals, caching, assets and budgets. Ship and operate it, covering CI, previews, security, testing, monitoring and rollbacks. Each stage feeds the next.\u003C\u002Fdesc>\n  \u003Crect x=\"0\" y=\"0\" width=\"760\" height=\"138\" fill=\"#ffffff\"\u002F>\n  \u003Cg style=\"font-family:system-ui, sans-serif;font-size:12px\">\n    \u003Crect x=\"20.0\" y=\"64.0\" width=\"217.3\" height=\"58.0\" rx=\"8\" fill=\"#6a4c93\" opacity=\"0.14\" stroke=\"#6a4c93\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Crect x=\"271.3\" y=\"64.0\" width=\"217.3\" height=\"58.0\" rx=\"8\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Cpath d=\"M239.3 93.0 L267.3 93.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px;marker-end:url(#hub-topics-hero-arrow)\"\u002F>\n    \u003Crect x=\"522.7\" y=\"64.0\" width=\"217.3\" height=\"58.0\" rx=\"8\" fill=\"#8ac926\" opacity=\"0.2\" stroke=\"#5a8a16\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Cpath d=\"M490.7 93.0 L518.7 93.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px;marker-end:url(#hub-topics-hero-arrow)\"\u002F>\n    \u003Ctext x=\"380.0\" y=\"30.0\" fill=\"#1f2937\" style=\"font-size:16px;text-anchor:middle;font-weight:700\">Three sections, one sequence of decisions\u003C\u002Ftext>\n    \u003Ctext x=\"128.7\" y=\"90.8\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">Choose the generator\u003C\u002Ftext>\n    \u003Ctext x=\"128.7\" y=\"107.7\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">selection, docs, search, i18n, SEO\u003C\u002Ftext>\n    \u003Ctext x=\"380.0\" y=\"90.8\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">Make it fast\u003C\u002Ftext>\n    \u003Ctext x=\"380.0\" y=\"107.7\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">vitals, caching, assets, budgets\u003C\u002Ftext>\n    \u003Ctext x=\"631.3\" y=\"90.8\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">Ship and operate\u003C\u002Ftext>\n    \u003Ctext x=\"631.3\" y=\"107.7\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">CI, previews, testing, rollbacks\u003C\u002Ftext>\n  \u003C\u002Fg>\n  \u003Cdefs>\n    \u003Cmarker id=\"hub-topics-hero-arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\n      \u003Cpath d=\"M0 0 L10 5 L0 10 z\" fill=\"#556071\"\u002F>\n    \u003C\u002Fmarker>\n  \u003C\u002Fdefs>\n\u003C\u002Fsvg>\n\u003Cfigcaption>Most projects move left to right once, then return to the middle and right sections for the life of the site.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>",{"k":25,"h":26,"items":27,"note":79,"more":80},"group","Choosing the Right Static Site Generator for Production",[28,33,38,43,48,53,57,62,67,71,75],{"t":29,"u":30,"d":31,"y":32},"Accessibility for Static Sites","\u002Fchoosing-the-right-static-site-generator-for-production\u002Faccessibility-for-static-sites\u002F","Make a static site usable by keyboard, screen reader and low-vision readers: themes, headings, focus, contrast, code blocks, diagrams and CI checks.","8 guides",{"t":34,"u":35,"d":36,"y":37},"Astro vs Eleventy for Documentation Sites","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002F","Compare Astro and Eleventy for documentation — project setup, Markdown handling, CI pipelines, asset optimization, and the bytes-shipped trade-off, with measured numbers.","14 guides",{"t":39,"u":40,"d":41,"y":42},"Docs Frameworks: Docusaurus, Starlight and VitePress","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fdocs-frameworks-docusaurus-starlight-vitepress\u002F","How the three opinionated documentation frameworks differ on build speed, versioning, search, theming and page weight — measured on the same 1,200-page corpus.","15 guides",{"t":44,"u":45,"d":46,"y":47},"Hugo Build Times for Large Repositories","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fhugo-build-times-for-large-repositories\u002F","Diagnose and fix slow Hugo builds at scale — template profiling, image-processing costs, render-hook caching, and the CI strategy that keeps 10k-page builds fast.","12 guides",{"t":49,"u":50,"d":51,"y":52},"Internationalization for Static Sites","\u002Fchoosing-the-right-static-site-generator-for-production\u002Finternationalization-for-static-sites\u002F","Ship a static site in several languages: URL structure, hreflang, i18n routing in Astro and Hugo, translation workflows, edge language detection and RTL.","9 guides",{"t":54,"u":55,"d":56,"y":52},"Jekyll Plugin Ecosystem","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem\u002F","A production Jekyll setup: pin your gems, group plugins correctly, run reproducible CI builds, and apply the build-optimization levers that actually move the needle.",{"t":58,"u":59,"d":60,"y":61},"Migrating Between Static Site Generators","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fmigrating-between-static-site-generators\u002F","Plan and execute an SSG migration without losing URLs, build speed or your writers: content inventory, template porting, redirect strategy, and a staged cutover with rollback.","13 guides",{"t":63,"u":64,"d":65,"y":66},"Next.js Static Export for Content Sites","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fnextjs-static-export-for-content-sites\u002F","When output export fits content and marketing sites — the runtime cost versus Astro and Hugo, routing and image caveats, trimming the shipped JavaScript, and exactly what the static build emits.","10 guides",{"t":68,"u":69,"d":70,"y":47},"Search for Static Sites","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fsearch-for-static-sites\u002F","How to add search to a static site without a server: Pagefind, Lunr, MiniSearch and Algolia compared on index size, query latency, relevance and cost.",{"t":72,"u":73,"d":74,"y":66},"SSG Framework Selection Matrix","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix\u002F","Turn SSG selection into a scored decision matrix — weight criteria for your project, run identical benchmark builds on each candidate, and let the numbers guide the choice.",{"t":76,"u":77,"d":78,"y":52},"Technical SEO for Static Sites","\u002Fchoosing-the-right-static-site-generator-for-production\u002Ftechnical-seo-for-static-sites\u002F","Build-time technical SEO for static sites: sitemaps, canonical URLs, JSON-LD, feeds, robots rules for previews, and pagination that search engines can crawl.","Match your team constraints to the right static site generator — Astro, Eleventy, Hugo, Jekyll, or a Next.js export — across JavaScript shipped, build speed, authoring, and ecosystem.",{"t":81,"u":82},"Read the framework selection overview","\u002Fchoosing-the-right-static-site-generator-for-production\u002F",{"k":22,"html":84},"\u003Cfigure>\n\u003Csvg viewBox=\"0 0 760 295\" role=\"img\" aria-labelledby=\"hub-topics-sections-title hub-topics-sections-desc\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n  \u003Ctitle id=\"hub-topics-sections-title\">Number of guides in each of the three sections\u003C\u002Ftitle>\n  \u003Cdesc id=\"hub-topics-sections-desc\">Vertical bars counting guides per section: Framework selection 121, Performance 103 and Deployment 123.\u003C\u002Fdesc>\n  \u003Crect x=\"0\" y=\"0\" width=\"760\" height=\"295\" fill=\"#ffffff\"\u002F>\n  \u003Cg style=\"font-family:system-ui, sans-serif;font-size:12px\">\n    \u003Crect x=\"108.3\" y=\"78.8\" width=\"90.0\" height=\"167.2\" rx=\"3\" fill=\"#6a4c93\" opacity=\"0.3\" stroke=\"#6a4c93\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"335.0\" y=\"103.6\" width=\"90.0\" height=\"142.4\" rx=\"3\" fill=\"#1982c4\" opacity=\"0.3\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"561.7\" y=\"76.0\" width=\"90.0\" height=\"170.0\" rx=\"3\" fill=\"#8ac926\" opacity=\"0.4\" stroke=\"#5a8a16\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M30.0 246.0 L730.0 246.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Ctext x=\"380.0\" y=\"30.0\" fill=\"#1f2937\" style=\"font-size:16px;text-anchor:middle;font-weight:700\">Guides in each section\u003C\u002Ftext>\n    \u003Ctext x=\"153.3\" y=\"71.8\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">121\u003C\u002Ftext>\n    \u003Ctext x=\"153.3\" y=\"264.0\" fill=\"#556071\" style=\"font-size:11.5px;text-anchor:middle\">Framework selection\u003C\u002Ftext>\n    \u003Ctext x=\"380.0\" y=\"96.6\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">103\u003C\u002Ftext>\n    \u003Ctext x=\"380.0\" y=\"264.0\" fill=\"#556071\" style=\"font-size:11.5px;text-anchor:middle\">Performance\u003C\u002Ftext>\n    \u003Ctext x=\"606.7\" y=\"69.0\" fill=\"#3f6410\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">123\u003C\u002Ftext>\n    \u003Ctext x=\"606.7\" y=\"264.0\" fill=\"#556071\" style=\"font-size:11.5px;text-anchor:middle\">Deployment\u003C\u002Ftext>\n  \u003C\u002Fg>\n\u003C\u002Fsvg>\n\u003Cfigcaption>347 guides across 33 topics, counted from the content index when this page was built.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>",{"k":25,"h":86,"items":87,"note":129,"more":130},"Core Web Vitals Optimization for SSGs",[88,92,96,101,105,109,113,117,121,125],{"t":89,"u":90,"d":91,"y":61},"CDN Caching Rules for SSGs","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcdn-caching-rules-for-ssgs\u002F","Maximize edge cache efficiency for static sites: cache fingerprinted assets for a year, revalidate HTML every request, and purge cleanly on deploy to cut TTFB.",{"t":93,"u":94,"d":95,"y":66},"CSS and JavaScript Asset Optimization","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcss-and-javascript-asset-optimization\u002F","Shrink and schedule the CSS and JavaScript a static site ships: critical CSS, unused-CSS removal, code splitting, minification, precompression and icon strategy.",{"t":97,"u":98,"d":99,"y":100},"Cumulative Layout Shift Fixes for Static Sites","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites\u002F","Find and fix the four things that move a static page after first paint: unsized media, late web fonts, injected embeds and CSS that lands after render. With measured before\u002Fafter CLS.","11 guides",{"t":102,"u":103,"d":104,"y":66},"Font Loading Strategies for Static Sites","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Ffont-loading-strategies-for-static-sites\u002F","Eliminate font-driven layout shift and slow text: subset, self-host, preload the critical face, and set font-display deliberately — all at build time on a static site.",{"t":106,"u":107,"d":108,"y":100},"Image Optimization Pipelines in Astro","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fimage-optimization-pipelines-in-astro\u002F","Optimize images at build time with Astro astro:assets — resized, modern-format images generated during the build with no runtime cost, plus responsive srcset, CI checks, and measurement.",{"t":110,"u":111,"d":112,"y":66},"JavaScript Hydration & Partial Rendering","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fjavascript-hydration-partial-rendering\u002F","Cut INP on static sites with partial hydration — ship static HTML, hydrate only real islands, choose the right client directive, and enforce a JS budget in CI.",{"t":114,"u":115,"d":116,"y":52},"Largest Contentful Paint Optimization for Static Sites","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Flargest-contentful-paint-optimization-for-static-sites\u002F","A complete approach to LCP on static sites — identify the LCP element, preload it, set fetchpriority, serve modern formats, and remove render-blocking CSS and fonts.",{"t":118,"u":119,"d":120,"y":100},"Performance Budgets and Lighthouse CI","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fperformance-budgets-and-lighthouse-ci\u002F","Stop performance regressions before they merge: Lighthouse CI on preview deploys, byte and timing budgets, variance control and field-data checks.",{"t":122,"u":123,"d":124,"y":52},"Resource Hints and Navigation Speed","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fresource-hints-and-navigation-speed\u002F","Use preconnect, preload, prefetch, speculation rules and view transitions to make static-site pages start faster and next-page clicks feel instant.",{"t":126,"u":127,"d":128,"y":52},"Third-Party Script Performance on Static Sites","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fthird-party-script-performance-on-static-sites\u002F","Analytics, chat widgets, embeds and consent tools undo a fast static build. Budget them, defer them, proxy them, and measure what each one actually costs in main-thread time.","Improve Core Web Vitals on static sites — LCP, CLS, INP — through disciplined asset processing, fast incremental builds, edge caching, and keeping JavaScript off pages that do not need it.",{"t":131,"u":132},"Read the performance overview","\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002F",{"k":22,"html":134},"\u003Cfigure>\n\u003Csvg viewBox=\"0 0 760 203\" role=\"img\" aria-labelledby=\"hub-topics-kinds-title hub-topics-kinds-desc\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n  \u003Ctitle id=\"hub-topics-kinds-title\">Count of how-tos, fixes, comparisons and concepts per section\u003C\u002Ftitle>\n  \u003Cdesc id=\"hub-topics-kinds-desc\">A matrix with one row per section and one column per kind of guide. Framework selection: 75 how-tos, 18 fixes, 17 comparisons, 11 concepts. Performance: 68 how-tos, 24 fixes, 11 comparisons, 0 concepts. Deployment: 102 how-tos, 13 fixes, 7 comparisons, 1 concepts.\u003C\u002Fdesc>\n  \u003Crect x=\"0\" y=\"0\" width=\"760\" height=\"203\" fill=\"#ffffff\"\u002F>\n  \u003Cg style=\"font-family:system-ui, sans-serif;font-size:12px\">\n    \u003Cpath d=\"M20.0 86.0 L740.0 86.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Crect x=\"214.0\" y=\"90.0\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"346.5\" y=\"90.0\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"479.0\" y=\"90.0\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"611.5\" y=\"90.0\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M20.0 119.6 L740.0 119.6\" fill=\"none\" stroke=\"#d9e2ef\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"214.0\" y=\"123.6\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"346.5\" y=\"123.6\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"479.0\" y=\"123.6\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M20.0 153.2 L740.0 153.2\" fill=\"none\" stroke=\"#d9e2ef\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"214.0\" y=\"157.2\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"346.5\" y=\"157.2\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"479.0\" y=\"157.2\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"611.5\" y=\"157.2\" width=\"124.5\" height=\"25.6\" rx=\"5\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M20.0 186.8 L740.0 186.8\" fill=\"none\" stroke=\"#d9e2ef\" style=\"stroke-width:1px\"\u002F>\n    \u003Ctext x=\"380.0\" y=\"30.0\" fill=\"#1f2937\" style=\"font-size:16px;text-anchor:middle;font-weight:700\">The kinds of guide in each section\u003C\u002Ftext>\n    \u003Ctext x=\"30.0\" y=\"75.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">Section\u003C\u002Ftext>\n    \u003Ctext x=\"276.2\" y=\"75.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">How-tos\u003C\u002Ftext>\n    \u003Ctext x=\"408.8\" y=\"75.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">Fixes\u003C\u002Ftext>\n    \u003Ctext x=\"541.2\" y=\"75.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">Comparisons\u003C\u002Ftext>\n    \u003Ctext x=\"673.8\" y=\"75.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">Concepts\u003C\u002Ftext>\n    \u003Ctext x=\"30.0\" y=\"106.4\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">Framework selection\u003C\u002Ftext>\n    \u003Ctext x=\"276.2\" y=\"106.2\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">75\u003C\u002Ftext>\n    \u003Ctext x=\"408.8\" y=\"106.2\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">18\u003C\u002Ftext>\n    \u003Ctext x=\"541.2\" y=\"106.2\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">17\u003C\u002Ftext>\n    \u003Ctext x=\"673.8\" y=\"106.2\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">11\u003C\u002Ftext>\n    \u003Ctext x=\"30.0\" y=\"140.0\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">Performance\u003C\u002Ftext>\n    \u003Ctext x=\"276.2\" y=\"139.8\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">68\u003C\u002Ftext>\n    \u003Ctext x=\"408.8\" y=\"139.8\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">24\u003C\u002Ftext>\n    \u003Ctext x=\"541.2\" y=\"139.8\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">11\u003C\u002Ftext>\n    \u003Ctext x=\"673.8\" y=\"139.8\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">0\u003C\u002Ftext>\n    \u003Ctext x=\"30.0\" y=\"173.6\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">Deployment\u003C\u002Ftext>\n    \u003Ctext x=\"276.2\" y=\"173.4\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">102\u003C\u002Ftext>\n    \u003Ctext x=\"408.8\" y=\"173.4\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">13\u003C\u002Ftext>\n    \u003Ctext x=\"541.2\" y=\"173.4\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">7\u003C\u002Ftext>\n    \u003Ctext x=\"673.8\" y=\"173.4\" fill=\"#1f2937\" style=\"font-size:11.5px;text-anchor:middle\">1\u003C\u002Ftext>\n  \u003C\u002Fg>\n\u003C\u002Fsvg>\n\u003Cfigcaption>Fixes cluster in performance, where most problems are observed as a symptom first; comparisons cluster in framework selection.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>",{"k":25,"h":136,"items":137,"note":186,"more":187},"Production-Ready Deployment & CI\u002FCD for SSGs",[138,142,146,150,154,158,162,166,170,174,178,182],{"t":139,"u":140,"d":141,"y":66},"Cloudflare Pages Edge Caching Setup","\u002Fproduction-ready-deployment-cicd-workflows\u002Fcloudflare-pages-edge-caching-setup\u002F","Control Cloudflare Pages caching with a _headers file: immutable year-long caching for fingerprinted assets, fresh HTML, scoped purges, and cf-cache-status verification.",{"t":143,"u":144,"d":145,"y":66},"Content Workflows for Documentation Teams","\u002Fproduction-ready-deployment-cicd-workflows\u002Fcontent-workflows-for-documentation-teams\u002F","Make a static site publishable by non-engineers: branch and review conventions, a CMS or editor layer, scheduled publishing, and build gates that catch content errors early.",{"t":147,"u":148,"d":149,"y":100},"GitHub Actions for Automated SSG Builds","\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds\u002F","Build and deploy static sites with GitHub Actions — path-filtered triggers, dependency and build caching, deterministic installs, and atomic deploys on every push.",{"t":151,"u":152,"d":153,"y":66},"Incremental Builds and Build Caching for SSGs","\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002F","Cut SSG build times with incremental rebuilds and CI caching — what Astro, Eleventy, Hugo and Next.js support, content-hash cache keys, and remote shared caches.",{"t":155,"u":156,"d":157,"y":66},"Monitoring Static Sites in Production","\u002Fproduction-ready-deployment-cicd-workflows\u002Fmonitoring-static-sites-in-production\u002F","What to watch on a static site after deploy: synthetic checks, broken links, edge 404s, real-user Core Web Vitals and cache health, with alerts that stay quiet.",{"t":159,"u":160,"d":161,"y":47},"Netlify vs Vercel Deployment Strategies","\u002Fproduction-ready-deployment-cicd-workflows\u002Fnetlify-vs-vercel-deployment-strategies\u002F","Compare Netlify and Vercel for SSG deployments — configuration style, build-cache behavior, deploy previews, edge functions, ISR vs pure static, and pricing.",{"t":163,"u":164,"d":165,"y":52},"Preview Environments for Pull Requests","\u002Fproduction-ready-deployment-cicd-workflows\u002Fpreview-environments-for-pull-requests\u002F","Give every pull request its own deployed URL so reviewers test the real built site — ephemeral deploys, quality gates against the preview, and teardown on merge.",{"t":167,"u":168,"d":169,"y":100},"Rollbacks and Deploy Safety for Static Sites","\u002Fproduction-ready-deployment-cicd-workflows\u002Frollbacks-and-deploy-safety-for-static-sites\u002F","Atomic deploys, immutable build artifacts, smoke tests against the preview URL and a one-command rollback — the safety net that makes shipping a static site boring.",{"t":171,"u":172,"d":173,"y":47},"Security Headers and Hardening for Static Sites","\u002Fproduction-ready-deployment-cicd-workflows\u002Fsecurity-headers-for-static-sites\u002F","Harden a static site end to end: CSP, HSTS, SRI, framing and referrer policies at the edge, plus a supply chain and deploy pipeline built to resist abuse.",{"t":175,"u":176,"d":177,"y":47},"Self-Hosting Static Sites on S3, Nginx and Caddy","\u002Fproduction-ready-deployment-cicd-workflows\u002Fself-hosting-static-sites\u002F","Run a static site on infrastructure you control: S3 with CloudFront, nginx or Caddy on a VM, with clean URLs, caching, redirects and zero-downtime deploys.",{"t":179,"u":180,"d":181,"y":32},"Serverless Functions for Static Sites","\u002Fproduction-ready-deployment-cicd-workflows\u002Fserverless-functions-for-static-sites\u002F","Add forms, API proxies, authentication and personalisation to a static site with edge and serverless functions — without giving up static pages or CDN caching.",{"t":183,"u":184,"d":185,"y":32},"Testing Static Sites in CI","\u002Fproduction-ready-deployment-cicd-workflows\u002Ftesting-static-sites-in-ci\u002F","A CI test suite for static sites: accessibility, end-to-end flows, HTML validity, redirects, headers, output snapshots and SEO metadata on every pull request.","Ship static sites with confidence: reproducible builds, preview-per-PR, atomic promotion, instant rollback, and edge caching across Cloudflare Pages, Netlify, Vercel, and GitHub Actions.",{"t":188,"u":189},"Read the deployment overview","\u002Fproduction-ready-deployment-cicd-workflows\u002F",1790943190462]