Free Astro SEO Audit
in 8 seconds.
Paste any Astro URL. Get 70+ ranking signals scored — schema, Core Web Vitals, mobile-first, AEO (ChatGPT & Perplexity visibility). AI Coach generates the exact fix. No signup. No credit card.
Or try a sample — audit astro.build
Astro starts with a near-perfect SEO foundation: zero JavaScript by default, static HTML output, content collections that map cleanly to URLs, and an official @astrojs/sitemap integration. Most Astro sites score 80+ on SEO out of the box. Where they fall short: forgetting per-page metadata, skipping JSON-LD structured data, mishandling hreflang on i18n sites, and unintentionally shipping client:load on components that should be static. Our audit catches each of these — and the JS-render reconciliation pass confirms your zero-JS pages really do ship zero JS to the user.
The 5 most common SEO issues
on Astro sites.
Our audit is tuned to spot the patterns that show up over and over on Astrosites. Here's what to look for — and how to fix each one.
Per-page <Head> metadata not set
A common Astro pattern is to share a Layout.astro that contains the <head>, then forget to pass per-page title + description props. Every page ends up with the same default title, which Google deduplicates in search results.
Fix: Pass title + description as Astro props from each page into the layout. Use the Astro <title> tag inside the layout's head slot. The audit catches duplicate titles across URLs.
Missing structured data on content collection pages
Content collections give you typed frontmatter (title, pubDate, author, tags) but Astro doesn't auto-generate Article schema from that. Most Astro blogs ship without JSON-LD.
Fix: Add a JSON-LD script in your layout that pulls title, pubDate, author from the frontmatter. Our Schema Generator outputs Article + BreadcrumbList JSON-LD you can drop in.
client:load on components that should be static
Astro lets you opt into hydration per component (client:load, client:visible, client:idle). Developers sometimes use client:load on a navbar or footer that has no interactivity — shipping JavaScript and breaking the islands architecture's INP benefits.
Fix: Audit each client: directive. Use client:visible or client:idle for low-priority interactive elements, no directive at all for purely visual components. Our PSI category surfaces JS weight contributions.
Sitemap integration installed but excluding sections
@astrojs/sitemap auto-generates a sitemap.xml at build, but if your astro.config.mjs has `filter` rules or your content collection is missing the schema, posts get silently excluded — Google sees fewer URLs than you have.
Fix: Hit /sitemap-index.xml or /sitemap-0.xml and count URLs against your actual content. Our audit checks the sitemap declaration and validates it parses without errors.
Hreflang missing on i18n routes
Astro's astro:i18n config produces localized routes but you have to wire hreflang manually. Sites with /en/, /es/, /de/ paths frequently miss the alternate links — Google ranks the wrong locale.
Fix: Add hreflang link tags in your layout for each localized URL. Our audit validates the hreflang chain for each locale.
When you outgrow the free tier.
Astro shines for content-heavy sites — blogs, docs, marketing sites with 50-500 URLs. Pro Yearly's full-site crawl audit (up to 25 pages per scan) catches issues across template-driven pages: a missing meta description in your blog post layout affects every post, and the crawl finds it in one batch. The AI Coach generates the exact .astro snippets — JSON-LD blocks for Article schema, hreflang link arrays, Open Graph meta tags — that drop straight into your layout files. Audit history dashboard tracks score per URL over time, so you see the impact of every astro.config.mjs change within a deploy cycle.
Astro SEO — answered.
Long-tail questions we hear from Astro site owners.
- Does this audit work on Astro sites?
- Yes — Astro is one of the easiest platforms to audit because static-by-default output gives crawlers the full content immediately. Both static (output: 'static') and hybrid SSR (output: 'hybrid') deployments work. Just paste your domain on the homepage.
- How do I add JSON-LD structured data in Astro?
- Inside your Layout.astro (or any .astro file), put a JSON-LD script tag in <head> with set:html and the JSON.stringify'd object. Astro renders it server-side, so crawlers see it on first response. Our Schema Generator outputs valid JSON-LD for Organization, Article, Product, FAQ, HowTo, BreadcrumbList.
- Is Astro better than Next.js for SEO?
- For content-heavy sites (blogs, docs, marketing pages): often yes. Astro's zero-JS-by-default approach gives you the best possible Core Web Vitals scores, and content collections map cleanly to SEO-friendly URLs. Next.js is better for SaaS apps with heavy interactivity (dashboards, e-commerce checkout). Both score well — pick based on the app's interactivity needs, not SEO.
- Why is my Astro site missing from Google's index?
- Three usual suspects: (1) your astro.config.mjs has site: undefined so sitemap URLs are wrong; (2) you accidentally set robots: noindex in a layout that applies site-wide; (3) the page is marked as draft: true in content collection frontmatter, so it's filtered out at build. Our audit checks robots directives and reports if a sitemap is reachable.
- Do Astro Islands hurt SEO?
- No — islands are hydrated client-side AFTER the static HTML loads, so all your content is still server-rendered and crawlable. The benefit is INP: only interactive components ship JS, so the page stays responsive. Audit your client: directive usage; the audit's PSI category surfaces if any island is becoming an LCP blocker.
- How does the audit handle Astro's view transitions?
- View transitions don't affect the audit — they're a UX feature for client-side navigation, but the underlying HTML output and metadata stay intact. The audit reads each URL's response independently, so view-transition'd navigation has zero impact on the SEO score.
Audit your Astro site
right now.
Free forever for any URL. 8-second audit. AI Coach generates the fix.