For Astro teams

Catch Astro SEO bugs in the pull request, not in Search Console.

SEOCode reviews every PR against an Astro-aware ruleset. It understands layout delegation, frontmatter meta, and props-driven <title>, so it flags the real regressions - a missing title, an accidental noindex, meta stranded in a client island - without false-flagging your valid layout patterns.

Add to your repo → View sample report

Free on the Developer plan, full ruleset on every pull request. Works with Astro pages, layouts, and content collections.

SEO reviews by framework: Next.js · Astro · SvelteKit · Remix

# or run it locally / in CI, no GitHub App required
npx @qobi/seocode check --staged

Astro ships static HTML - and silent SEO gaps with it.

Astro renders to static HTML, which is great for SEO right up until a page forgets to pass its title, or a new layout drops a canonical. Nothing fails the build - you find out weeks later. These are the failure modes SEOCode was built to catch.

01

A new page forgets to pass its title

Pages delegate <head> to a shared Layout through props. Add a page that doesn't pass title or description and it inherits the layout default, or renders empty - with no build error.

02

Meta stranded in a client island

Tags rendered from a client:load component only appear after hydration. Astro serves static HTML; crawlers read that, where island-injected meta is missing entirely.

03

A new layout with no <head> essentials

Spin up a second Layout for a section and it's easy to omit the canonical, Open Graph, or the charset and viewport that every page needs.

04

Broken JSON-LD from the frontmatter

Structured data assembled in the component script and interpolated into the template can emit invalid JSON that search engines silently discard.

05

Content collection pages missing metadata

MDX or Markdown entries rendered through a dynamic route like [slug].astro that doesn't map frontmatter to <title> and description ship with no unique meta.

It reads your source the way Astro does.

SEOCode parses your .astro, .md, and .mdx files, not just rendered HTML. It resolves layout delegation before it decides anything is wrong - so it catches the genuine gaps and stays quiet on valid patterns.

01

Layout delegation

Resolves title and description passed as props from a page into its Layout's <head>, so a page is never flagged for meta its layout renders.

02

Frontmatter and template

Reads the component script (frontmatter) and the template, so a dynamic {title} bound from props or a content collection is understood, not flagged.

03

Static vs island rendering

Detects meta and JSON-LD that only exist inside a hydrated island - the client-only tags crawlers never see - and tells you to move them into the static head.

04

Structured data validity

Validates JSON-LD emitted from frontmatter, and checks entity schema for @id and sameAs - the signals that power rich results and AI citations.

05

The rest of the SEO and GEO ruleset

Titles, meta descriptions, canonical URLs, Open Graph and Twitter cards, heading structure, image alt and lazy-loading, blocked AI crawlers in robots.txt, and more - the same checks on every PR.

Zero-noise by design

SEOCode only comments when it finds something worth fixing. Layout-delegated meta, props-driven titles, and valid frontmatter JSON-LD do not trigger findings - so the review is signal, and your team keeps trusting it.

Three minutes to wire in, then it's automatic.

No config to write, no CI to maintain. Install once and SEOCode reviews every pull request from then on.

01

Install in one click

Add SEOCode to your Astro repo or whole org. Nothing to configure, it detects the framework automatically. Prefer your own pipeline? Use the @qobi/seocode CLI instead.

02

Open a pull request

SEOCode reviews the changed files, resolves your metadata, and runs the full ruleset, usually within seconds of the PR opening.

03

Get fixes in the comment

Issues are grouped by severity, each with the exact fix. Critical, deploy-blocking problems lead, and you can require the check to pass before a merge.

Questions, answered.

Does it understand Astro's layout delegation?
Yes. SEOCode resolves title and description passed as props from a page into the Layout that renders <head>, so it will not flag a page for meta the layout already provides.
Does it work with content collections and MDX?
Yes. It reviews the .astro, .md, and .mdx files changed in a PR, including dynamic collection routes like [slug].astro, and checks that each maps frontmatter to real page metadata.
Will it false-positive on props-driven meta?
No. It reads the frontmatter and the template, so a {title} bound from props or a collection entry is recognised. It flags the genuine gaps - a page that passes nothing, or meta stranded in a client island.
Can I run it in CI without the GitHub App?
Yes. The @qobi/seocode CLI runs the full ruleset locally or in any CI pipeline. Use seocode check --staged in a pre-commit hook, or run it as a step in GitHub Actions, GitLab CI, or CircleCI. The CLI is free on any repository, public or private. The GitHub App is the zero-config option; the CLI is for teams that want it inside their existing pipeline.
Is it free?
Yes. On the Developer plan the GitHub App runs the complete ruleset on every pull request in public repositories, and the @qobi/seocode CLI runs it on any code, public or private, free. The Studio plan ($19/mo per organization, or $190/yr) adds the GitHub App on private repositories, plus team alerts. No rules are gated behind the paid plan.

Stop shipping Astro SEO regressions.

Add SEOCode to your repository and the next pull request gets reviewed automatically. Or scan a live URL first to see what it finds.