Getting a perfect Lighthouse SEO score is easy. Actually ranking on Google requires more. This checklist covers the 25 technical SEO steps that matter for Astro sites in 2026, organized by priority.
Bookmark this page and work through it for every site you launch.
Foundation (Do These First)
1. Set Canonical URLs on Every Page
Every page needs a <link rel="canonical"> pointing to its preferred URL. Without canonicals, Google may index duplicate versions of your pages (with/without trailing slashes, with/without www).
<link rel="canonical" href={`${import.meta.env.SITE}${Astro.url.pathname}`} />
In Wumty templates, canonical URLs are generated automatically from your base_url config and the page pathname. Override per-page via frontmatter when needed.
2. Configure Trailing Slash Consistency
Pick a trailing slash strategy and stick with it. Mixed URLs (/about and /about/) create duplicate content issues.
// astro.config.mjs
export default defineConfig({
trailingSlash: "always", // or "never"
});
Set trailingSlash: "always" in your Astro config and make sure your internal links match. Google treats /about and /about/ as different URLs.
3. Create a robots.txt
Place a robots.txt in your public/ directory:
User-agent: *
Allow: /
Disallow: /404
Disallow: /api/
Sitemap: https://yoursite.com/sitemap-index.xml
Block pages you don’t want indexed (404, API endpoints, staging environments). Always include your sitemap URL.
4. Generate an XML Sitemap
Astro has a built-in sitemap integration:
pnpm add @astrojs/sitemap
// astro.config.mjs
import sitemap from "@astrojs/sitemap";
export default defineConfig({
site: "https://yoursite.com",
integrations: [sitemap()],
});
This generates a sitemap-index.xml at build time with all your static and dynamic routes. Submit it to Google Search Console after deployment.
5. Set the Site URL
This sounds obvious, but Astro needs the site property in astro.config.mjs to generate correct canonical URLs, sitemaps, and Open Graph tags:
export default defineConfig({
site: "https://yoursite.com",
});
Without this, absolute URLs in meta tags and sitemaps will be wrong or missing.
Meta Tags (Essential for Every Page)
6. Write Unique Title Tags
Every page needs a unique <title> tag under 60 characters. Lead with your primary keyword:
# Good: keyword-first
meta_title: "Astro SEO Checklist 2026 | 25 Technical Steps | Wumty"
# Bad: brand-first
meta_title: "Wumty | Astro SEO Checklist"
Google displays roughly 60 characters in search results. Front-load the most important keywords.
7. Write Unique Meta Descriptions
Every page needs a unique <meta name="description"> under 160 characters that accurately describes the content and includes a call to action:
description: "The complete Astro SEO checklist for 2026. 25 actionable steps covering meta tags, structured data, Core Web Vitals, and content optimization."
Meta descriptions don’t directly affect rankings, but they strongly affect click-through rates from search results.
8. Add Open Graph Tags
Open Graph tags control how your pages appear when shared on social media:
<meta property="og:title" content="Page Title" />
<meta property="og:description" content="Page description" />
<meta property="og:image" content="https://yoursite.com/images/og/page.png" />
<meta property="og:url" content="https://yoursite.com/page/" />
<meta property="og:type" content="website" />
Use images sized 1200x630px for optimal display on Facebook, LinkedIn, and Twitter. Each page should ideally have a unique OG image.
9. Add Twitter Card Tags
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Page Title" />
<meta name="twitter:description" content="Page description" />
<meta name="twitter:image" content="https://yoursite.com/images/og/page.png" />
Use summary_large_image for pages with visual content. Test your cards with Twitter’s Card Validator.
10. Set Robots Meta Per Page
Control indexing at the page level:
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
Use max-image-preview:large to allow Google to show large image previews in search results. Set noindex on pages like thank-you pages or internal tools.
Structured Data (Rich Results)
11. Add Organization Schema
Every site needs an Organization (or Person) schema on the homepage:
{
"@type": "Organization",
"name": "Your Business",
"url": "https://yoursite.com",
"logo": "https://yoursite.com/images/logo.svg",
"sameAs": ["https://twitter.com/you", "https://github.com/you"]
}
This tells Google who owns the site and connects your social profiles.
12. Add WebSite Schema with SearchAction
{
"@type": "WebSite",
"url": "https://yoursite.com",
"name": "Your Site Name",
"potentialAction": {
"@type": "SearchAction",
"target": "https://yoursite.com/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
This can enable a sitelinks search box in Google results.
13. Add BreadcrumbList Schema
Breadcrumbs help Google understand your site hierarchy:
{
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://yoursite.com/" },
{ "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://yoursite.com/blog/" },
{ "@type": "ListItem", "position": 3, "name": "This Post" }
]
}
Wumty templates generate breadcrumb schema automatically from the URL pathname.
14. Add Article Schema for Blog Posts
Every blog post should include BlogPosting or Article schema:
{
"@type": "BlogPosting",
"headline": "Post Title",
"datePublished": "2026-03-10",
"dateModified": "2026-03-13",
"author": { "@type": "Person", "name": "Author Name" },
"description": "Post description"
}
Include dateModified and update it when you revise content. Google uses this for freshness signals.
15. Add FAQ Schema Where Appropriate
FAQ sections with proper schema can earn rich results in search:
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Your question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Your answer."
}
}
]
}
Only use FAQ schema on pages where FAQs are a primary content feature. Don’t spam it on every page.
Performance (Core Web Vitals)
16. Achieve Sub-2.5s Largest Contentful Paint
LCP measures how quickly the main content loads. For Astro sites:
- Use
loading="eager"andfetchpriority="high"on hero images - Preload critical fonts with
<link rel="preload"> - Inline critical CSS in the
<head> - Avoid render-blocking JavaScript
17. Achieve Zero Cumulative Layout Shift
CLS measures visual stability. Prevent layout shifts by:
- Setting explicit
widthandheighton all images - Using
font-display: swapwith proper font fallbacks - Avoiding dynamically injected content above the fold
18. Minimize Total Blocking Time
TBT measures JavaScript blocking. Astro’s zero-JS default makes this easy:
- Use
client:visibleorclient:mediainstead ofclient:loadwhere possible - Keep interactive islands small and focused
- Avoid third-party scripts that block the main thread
19. Optimize Images
Every image should be:
- Served in WebP or AVIF format
- Responsively sized with
srcset - Lazy loaded below the fold (
loading="lazy") - Include descriptive
alttext for accessibility and image search
Astro’s built-in <Image> component handles format conversion and responsive sizing automatically.
20. Optimize Font Loading
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
Use font-display: swap to prevent invisible text while fonts load. Consider self-hosting fonts to eliminate third-party DNS lookups.
Content & Internal Linking
21. Use Proper Heading Hierarchy
Every page needs exactly one <h1>. Subheadings should follow a logical hierarchy:
h1: Page Title
h2: Major Section
h3: Subsection
h2: Another Major Section
Don’t skip levels (h1 → h3). Heading hierarchy helps Google understand content structure and can influence featured snippets.
22. Add Internal Links Between Related Pages
Every page should link to 3-5 related pages on your site. This distributes PageRank and helps Google discover content:
- Blog posts link to related products/services
- Product pages link to relevant blog tutorials
- Category pages link to individual items
23. Use Descriptive Anchor Text
<!-- Good: descriptive -->
<a href="/blog/astro-seo-guide/">complete Astro SEO guide</a>
<!-- Bad: generic -->
<a href="/blog/astro-seo-guide/">click here</a>
Anchor text tells Google what the linked page is about. Use natural, keyword-relevant phrases.
24. Add Alt Text to All Images
Every <img> needs descriptive alt text:
<!-- Good: descriptive -->
<img alt="Lighthouse performance score showing 100/100" src="..." />
<!-- Bad: keyword stuffing -->
<img alt="astro template astro lighthouse astro seo" src="..." />
Alt text serves accessibility and helps images rank in Google Image Search.
25. Keep URLs Clean and Descriptive
Good: /blog/astro-seo-checklist/
Bad: /blog/post-12345/
Bad: /blog/the-complete-and-ultimate-astro-seo-checklist-for-beginners-2026/
Use 3-5 words that describe the content. Avoid stop words, numbers, and excessively long URLs.
Post-Launch
After deploying, complete these tasks:
- Submit sitemap to Google Search Console
- Request indexing for your most important pages
- Test structured data with Google’s Rich Results Test
- Test OG tags with Facebook’s Sharing Debugger and Twitter’s Card Validator
- Run Lighthouse on key pages to verify scores
- Set up Search Console monitoring for crawl errors, indexing issues, and Core Web Vitals
Using This Checklist with Wumty
Wumty templates handle items 1-15 and 16-20 automatically through the SEO Toolkit and Performance Toolkit. Items 21-25 depend on your content, but our templates provide the structure (heading hierarchy, image components with required alt text, clean URL routing).
Download the free Starter Kit with SEO fundamentals included, or get the full technical SEO stack with the Single Site. The SEO Toolkit handles items 11-15 automatically, while the Performance Toolkit covers items 16-20. For dark mode without FOUC (item 17), the Theme System solves it out of the box. For a deeper dive into performance, read how we get 100/100 Lighthouse on every site.
Want a site that nails every item on this checklist out of the box? The Starter Kit is free and achieves top Lighthouse performance from day one. See all kits on the pricing page.