Skip to content

SEO Checklist

Everything to verify before and after the first deploy.


  • site: in astro.config.mjs = production domain (no www, correct TLD)
  • robots.txt sitemap URL matches site: exactly
  • Both domain.com and www.domain.com added as Cloudflare Pages custom domains
  • Every page has a unique title and description
  • <link rel="canonical"> uses the production domain (not localhost)
  • Canonical is suppressed on all noindex pages (checkout, payment-return, thank-you)
  • noindex pages have <meta name="robots" content="noindex, nofollow">
  • OG image exists at /og-image.jpg (1200x630)
  • OG og:url matches the canonical URL
  • JSON-LD passes Google’s rich results test
  • aggregateRating uses real client numbers (not placeholder 4.9/38)
  • address is the real business address
  • telephone and email are correct
  • sameAs contains real social profile URLs
  • Homepage has FAQPage JSON-LD with 5+ questions
  • No icon-only links without <span class="sr-only"> text
  • No generic “Learn more” links without sr-only service context
  • No duplicate H2 text across pages
  • Utility pages disallowed: /checkout, /payment-return, /thank-you
  • Sitemap URL in robots.txt matches production domain
  • Sitemap submitted to Google Search Console after first deploy
  • All images have descriptive alt text
  • First/LCP image uses loading="eager" + fetchpriority="high"
  • All other images use loading="lazy"
  • Only reference favicon PNG files that actually exist in /public/
  • If PNGs not ready, use SVG-only <link rel="icon" type="image/svg+xml">
  • PageSpeed score 90+ on mobile and desktop
  • Core Web Vitals: LCP < 2.5s, CLS < 0.1, INP < 200ms
  • npm run indexnow - submit all URLs to Bing/Yandex
  • Submit sitemap in Google Search Console
  • Test OG image: paste URL into opengraph.xyz
  • Force WhatsApp/social re-scrape via Facebook debugger