[{"data":1,"prerenderedAt":74},["ShallowReactive",2],{"hub:tools-github-pages":3},{"path":4,"key":5,"title":6,"h1":7,"description":8,"crumbs":9,"blocks":17},"\u002Ftools\u002Fgithub-pages\u002F","tools-github-pages","GitHub Pages Guides for Static Sites","GitHub Pages","Guides for publishing static sites on GitHub Pages: any generator via Actions, custom domains and HTTPS, Jekyll without plugin limits and pull request previews.",[10,13,16],[11,12],"Home","\u002F",[14,15],"Tools","\u002Ftools\u002F",[7,4],[18,21,23,26,43,45,60,62],{"k":19,"text":20},"p","GitHub Pages hosts a static site next to its source, free for public repositories, and since deployments from Actions artifacts it publishes the output of any generator rather than only Jekyll. The guides below cover publishing Hugo, Astro, Eleventy, Jekyll and VitePress through one reusable workflow, getting base paths right for project sites, and moving to a custom domain with enforced HTTPS.",{"k":19,"text":22},"Pages has gaps compared with commercial static hosts, and two guides work around the most felt of them: it has no pull request previews, so one guide adds them through a second host or a second Pages site, and it cannot set response headers, which shapes how the other guides handle redirects and security.",{"k":24,"html":25},"fig","\u003Cfigure>\n\u003Csvg viewBox=\"0 0 760 138\" role=\"img\" aria-labelledby=\"hub-github-pages-hero-title hub-github-pages-hero-desc\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n  \u003Ctitle id=\"hub-github-pages-hero-title\">Steps shared by every GitHub Pages deploy\u003C\u002Ftitle>\n  \u003Cdesc id=\"hub-github-pages-hero-desc\">Four steps. Configure Pages to get the base path. Build with that base path. Upload the output as a Pages artifact. Deploy to the github-pages environment.\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=\"154.5\" height=\"58.0\" rx=\"8\" fill=\"#f8fafc\" stroke=\"#d9e2ef\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Crect x=\"208.5\" y=\"64.0\" width=\"154.5\" height=\"58.0\" rx=\"8\" fill=\"#ffca3a\" opacity=\"0.24\" stroke=\"#a97b00\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Cpath d=\"M176.5 93.0 L204.5 93.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px;marker-end:url(#hub-github-pages-hero-arrow)\"\u002F>\n    \u003Crect x=\"397.0\" y=\"64.0\" width=\"154.5\" height=\"58.0\" rx=\"8\" fill=\"#1982c4\" opacity=\"0.14\" stroke=\"#1982c4\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Cpath d=\"M365.0 93.0 L393.0 93.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px;marker-end:url(#hub-github-pages-hero-arrow)\"\u002F>\n    \u003Crect x=\"585.5\" y=\"64.0\" width=\"154.5\" height=\"58.0\" rx=\"8\" fill=\"#8ac926\" opacity=\"0.2\" stroke=\"#5a8a16\" style=\"stroke-width:1.5px\"\u002F>\n    \u003Cpath d=\"M553.5 93.0 L581.5 93.0\" fill=\"none\" stroke=\"#556071\" style=\"stroke-width:2px;marker-end:url(#hub-github-pages-hero-arrow)\"\u002F>\n    \u003Ctext x=\"380.0\" y=\"30.0\" fill=\"#1f2937\" style=\"font-size:16px;text-anchor:middle;font-weight:700\">Publishing to GitHub Pages from any generator\u003C\u002Ftext>\n    \u003Ctext x=\"97.2\" y=\"90.8\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">configure-pages\u003C\u002Ftext>\n    \u003Ctext x=\"97.2\" y=\"107.7\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">base path\u003C\u002Ftext>\n    \u003Ctext x=\"285.8\" y=\"90.8\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">Build\u003C\u002Ftext>\n    \u003Ctext x=\"285.8\" y=\"107.7\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">per generator\u003C\u002Ftext>\n    \u003Ctext x=\"474.2\" y=\"90.8\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">Upload artifact\u003C\u002Ftext>\n    \u003Ctext x=\"474.2\" y=\"107.7\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">output folder\u003C\u002Ftext>\n    \u003Ctext x=\"662.8\" y=\"90.8\" fill=\"#1f2937\" style=\"font-size:13px;text-anchor:middle;font-weight:700\">Deploy\u003C\u002Ftext>\n    \u003Ctext x=\"662.8\" y=\"107.7\" fill=\"#556071\" style=\"font-size:11px;text-anchor:middle\">github-pages env\u003C\u002Ftext>\n  \u003C\u002Fg>\n  \u003Cdefs>\n    \u003Cmarker id=\"hub-github-pages-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>Only the build step differs between generators.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>",{"k":27,"h":28,"items":29},"group","Choosing the Right Static Site Generator for Production",[30,35,39],{"t":31,"u":32,"d":33,"y":34},"Custom Domains and HTTPS for Jekyll on GitHub Pages","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem\u002Fcustom-domains-and-https-for-jekyll-on-github-pages\u002F","Point a custom domain at a Jekyll site on GitHub Pages, get HTTPS enforced, fix certificate and DNS errors, and keep url and baseurl correct in _config.yml.","How-to",{"t":36,"u":37,"d":38,"y":34},"Deploying Jekyll with GitHub Actions","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem\u002Fdeploying-jekyll-with-github-actions\u002F","Replace the classic GitHub Pages Jekyll builder with a GitHub Actions workflow: any plugin, any Jekyll version, caching, previews and Pages deployment.",{"t":40,"u":41,"d":42,"y":34},"Running Jekyll on GitHub Pages Without Plugins","\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem\u002Frunning-jekyll-on-github-pages-without-plugins\u002F","The allowlist blocks most gems. Replace plugin behaviour with Liquid, data files and a build step — or take the Actions route and keep the plugins you actually need.",{"k":24,"html":44},"\u003Cfigure>\n\u003Csvg viewBox=\"0 0 760 295\" role=\"img\" aria-labelledby=\"hub-github-pages-kinds-title hub-github-pages-kinds-desc\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n  \u003Ctitle id=\"hub-github-pages-kinds-title\">Number of GitHub Pages guides of each kind\u003C\u002Ftitle>\n  \u003Cdesc id=\"hub-github-pages-kinds-desc\">Vertical bars: How-tos 6, Fixes 0, Comparisons 0 and Concepts 0.\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=\"80.0\" y=\"76.0\" width=\"90.0\" height=\"170.0\" rx=\"3\" fill=\"#1982c4\" opacity=\"0.3\" stroke=\"#1982c4\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"250.0\" y=\"243.0\" width=\"90.0\" height=\"3.0\" rx=\"3\" fill=\"#ff595e\" opacity=\"0.3\" stroke=\"#d83b41\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"420.0\" y=\"243.0\" width=\"90.0\" height=\"3.0\" rx=\"3\" fill=\"#ffca3a\" opacity=\"0.45\" stroke=\"#a97b00\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"590.0\" y=\"243.0\" width=\"90.0\" height=\"3.0\" rx=\"3\" fill=\"#6a4c93\" opacity=\"0.3\" stroke=\"#6a4c93\" 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\">GitHub Pages guides by kind\u003C\u002Ftext>\n    \u003Ctext x=\"125.0\" y=\"69.0\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">6\u003C\u002Ftext>\n    \u003Ctext x=\"125.0\" y=\"264.0\" fill=\"#556071\" style=\"font-size:11.5px;text-anchor:middle\">How-tos\u003C\u002Ftext>\n    \u003Ctext x=\"295.0\" y=\"236.0\" fill=\"#b32b30\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">0\u003C\u002Ftext>\n    \u003Ctext x=\"295.0\" y=\"264.0\" fill=\"#556071\" style=\"font-size:11.5px;text-anchor:middle\">Fixes\u003C\u002Ftext>\n    \u003Ctext x=\"465.0\" y=\"236.0\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">0\u003C\u002Ftext>\n    \u003Ctext x=\"465.0\" y=\"264.0\" fill=\"#556071\" style=\"font-size:11.5px;text-anchor:middle\">Comparisons\u003C\u002Ftext>\n    \u003Ctext x=\"635.0\" y=\"236.0\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:middle;font-weight:700\">0\u003C\u002Ftext>\n    \u003Ctext x=\"635.0\" y=\"264.0\" fill=\"#556071\" style=\"font-size:11.5px;text-anchor:middle\">Concepts\u003C\u002Ftext>\n  \u003C\u002Fg>\n\u003C\u002Fsvg>\n\u003Cfigcaption>6 guides use GitHub Pages in depth; each is listed below under the section it belongs to.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>",{"k":27,"h":46,"items":47},"Production-Ready Deployment & CI\u002FCD for SSGs",[48,52,56],{"t":49,"u":50,"d":51,"y":34},"Deploying to GitHub Pages with Actions","\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds\u002Fdeploying-to-github-pages-with-actions\u002F","Deploy any static site generator to GitHub Pages with the official Actions workflow: artifacts, base paths, custom domains and what Pages cannot do.",{"t":53,"u":54,"d":55,"y":34},"Publishing Any Generator to GitHub Pages With Actions","\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds\u002Fpublishing-any-generator-to-github-pages-with-actions\u002F","One reusable GitHub Actions workflow that publishes Hugo, Astro, Eleventy, Jekyll or VitePress sites to GitHub Pages, with base paths, caching and a 404 page.",{"t":57,"u":58,"d":59,"y":34},"Pull Request Previews for GitHub Pages Sites","\u002Fproduction-ready-deployment-cicd-workflows\u002Fpreview-environments-for-pull-requests\u002Fpull-request-previews-for-github-pages-sites\u002F","Give a GitHub Pages site a preview per pull request: deploy builds to a preview host or a subfolder, comment the URL, handle base paths and clean up on close.",{"k":24,"html":61},"\u003Cfigure>\n\u003Csvg viewBox=\"0 0 760 176\" role=\"img\" aria-labelledby=\"hub-github-pages-topics-title hub-github-pages-topics-desc\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n  \u003Ctitle id=\"hub-github-pages-topics-title\">Topics with the most GitHub Pages guides\u003C\u002Ftitle>\n  \u003Cdesc id=\"hub-github-pages-topics-desc\">Horizontal bars, largest first: Jekyll Plugin Ecosystem 3, GitHub Actions for Automated SSG Builds 2 and Preview Environments for Pull Requests 1.\u003C\u002Fdesc>\n  \u003Crect x=\"0\" y=\"0\" width=\"760\" height=\"176\" fill=\"#ffffff\"\u002F>\n  \u003Cg style=\"font-family:system-ui, sans-serif;font-size:12px\">\n    \u003Crect x=\"350.0\" y=\"65.0\" width=\"365.6\" height=\"20.0\" rx=\"3\" fill=\"#6a4c93\" opacity=\"0.3\" stroke=\"#6a4c93\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"350.0\" y=\"99.0\" width=\"243.7\" height=\"20.0\" rx=\"3\" fill=\"#6a4c93\" opacity=\"0.3\" stroke=\"#6a4c93\" style=\"stroke-width:1px\"\u002F>\n    \u003Crect x=\"350.0\" y=\"133.0\" width=\"121.9\" height=\"20.0\" rx=\"3\" fill=\"#6a4c93\" opacity=\"0.3\" stroke=\"#6a4c93\" style=\"stroke-width:1px\"\u002F>\n    \u003Cpath d=\"M350.0 60.0 L350.0 158.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\">Where GitHub Pages comes up\u003C\u002Ftext>\n    \u003Ctext x=\"20.0\" y=\"79.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start\">Jekyll Plugin Ecosystem\u003C\u002Ftext>\n    \u003Ctext x=\"723.6\" y=\"79.5\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">3\u003C\u002Ftext>\n    \u003Ctext x=\"20.0\" y=\"113.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start\">GitHub Actions for Automated SSG Builds\u003C\u002Ftext>\n    \u003Ctext x=\"601.7\" y=\"113.5\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">2\u003C\u002Ftext>\n    \u003Ctext x=\"20.0\" y=\"147.2\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start\">Preview Environments for Pull Requests\u003C\u002Ftext>\n    \u003Ctext x=\"479.9\" y=\"147.5\" fill=\"#1f2937\" style=\"font-size:12px;text-anchor:start;font-weight:700\">1\u003C\u002Ftext>\n  \u003C\u002Fg>\n\u003C\u002Fsvg>\n\u003Cfigcaption>Topic pages give the wider context for each group; the numbers count only guides that use this tool in depth.\u003C\u002Ffigcaption>\n\u003C\u002Ffigure>",{"k":27,"h":63,"items":64},"Often used with GitHub Pages",[65,70],{"t":66,"u":67,"d":68,"y":69},"Jekyll","\u002Ftools\u002Fjekyll\u002F","Plugins, reproducible builds, upgrades and migration away.","3 shared guides",{"t":71,"u":72,"d":73,"y":69},"GitHub Actions","\u002Ftools\u002Fgithub-actions\u002F","Caching, matrix builds, reusable workflows and pinning.",1790943190468]