Skip to content

Going live

Where
Your domain in site.url src/content/site.json — canonical links, share links, sitemap.xml and robots.txt are built from it
Name, title, description src/content/site.json
Contact details, opening hours, map link src/content/site.json
Browser icons replaced public/icon.svg, favicon.ico, apple-icon.png
Share image replaced public/opengraph-image.png, and its description (shareImageAlt) in src/layouts/Layout.astro
Demo text and photos replaced src/content/pages/, src/content/collections/, src/assets/images/
Forms deliver to you Forms
Style guide kept or deleted src/pages/style-guide.astro
npm run check and npm run build pass, npm run preview looks right

The demo content is there to be replaced: leaving “Nitip”, the London address or the sample case studies on a live site is the most common mistake.

npm run build writes a complete static site to dist/: HTML files, one stylesheet, a few small scripts, optimised images. Any host that serves files can run it — no Node.js needed on the server (unless you chose server-mode forms).

Vercel, Netlify or Cloudflare Pages (free for most sites)

Section titled “Vercel, Netlify or Cloudflare Pages (free for most sites)”
  1. Push the project to GitHub, GitLab or Bitbucket.
  2. Import the repository. Astro is detected: build command npm run build, output folder dist.
  3. Add your form variables (PUBLIC_FORM_ENDPOINT, …) in the host’s environment settings, then deploy.
  4. Add your domain in the host’s Domains settings and follow the DNS instructions.

Pages are built as files (about.html) and served at clean addresses (/about). Netlify and Cloudflare Pages do that by default; on Vercel, add a vercel.json next to package.json with { "cleanUrls": true }.

Any other host (shared hosting, S3, a VPS)

Section titled “Any other host (shared hosting, S3, a VPS)”
Terminal window
npm run build

Upload the contents of dist/ to the web root. For clean addresses, make the server try <path>.html:

  • Apache (.htaccess):
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+)$ $1.html [L]
    ErrorDocument 404 /404.html
  • nginx: try_files $uri $uri.html $uri/ =404; and error_page 404 /404.html;

If you set PUBLIC_FORM_MODE=server, add your host’s adapter first (npx astro add vercel, netlify, cloudflare or node). Only the form route runs on the server; every page stays static.

  1. Check the pages. Click through every page on a phone and a laptop: menu, sliders, accordions, Load More, both forms.
  2. Send yourself a submission from the live site and reply to it.
  3. Verify the share card. Paste your URL into https://www.opengraph.xyz or a chat window and confirm the image and title.
  4. Tell Google. Add the site to Search Console, verify ownership and submit https://yourdomain.com/sitemap.xml. Bing has the same thing in Webmaster Tools.
  5. Analytics, if you want it. Add your snippet to the <head> in src/layouts/Layout.astro, or use your host’s built-in analytics (Vercel Analytics, Cloudflare Web Analytics, Plausible, Fathom) — none of them need a cookie banner.
  6. Keep the content moving. New posts, projects and roles are an entry each in a JSON file; see Editing the content, or connect a CMS (Using a headless CMS) if someone else will publish.

The template ships with what search engines look for: static HTML, one <h1> per page, titles and descriptions per page, canonical links, sitemap.xml, robots.txt, share cards, optimised and lazy-loaded images, and a Lighthouse performance score of 100 on the demo. Keeping it there is mostly about images: Astro resizes them, but a 12 MB camera file still slows the build and the first visit — export photos around 2400 px wide.