For SvelteKit teams
Catch SvelteKit SEO bugs in the pull request, not in Search Console.
SEOCode reviews every PR against a SvelteKit-aware ruleset. It understands <svelte:head>, load functions, and layout inheritance, so it flags the real regressions - a missing title, a route with SSR disabled, meta rendered only on the client - without false-flagging your valid dynamic patterns.
Free on the Developer plan, full ruleset on every pull request. Works with server-rendered and prerendered routes.
SEO reviews by framework: Next.js · Astro · SvelteKit · Remix
# or run it locally / in CI, no GitHub App required
npx @qobi/seocode check --staged
The problem
SvelteKit's SEO lives in places a diff won't show you.
Metadata sits in <svelte:head>, rendering mode in a one-line export, canonical in a load function. Any of them can break without failing the build - you find out weeks later. These are the failure modes SEOCode was built to catch.
A route disables SSR
export const ssr = false on a route or in a layout means the server sends an empty shell. Crawlers get no title and no content - the most damaging SvelteKit SEO mistake, and invisible in a diff.
A new dynamic route ships with no <svelte:head>
Add [slug]/+page.svelte and forget the per-route <svelte:head>, and every page renders with the layout default title.
Meta set in onMount instead of <svelte:head>
Tags added imperatively in onMount only exist after hydration; the server HTML crawlers read has none of them.
Broken JSON-LD injected with {@html}
Structured data built in a script block and injected with {@html ...} can emit invalid JSON that search engines silently discard.
Prerender and canonical gaps
A route that isn't prerendered, or is missing its canonical, is easy to ship when the config lives in +page.ts or +layout.ts.
Framework-aware
It reads your source the way SvelteKit does.
SEOCode parses your .svelte and route files, not just rendered HTML. It resolves <svelte:head> across a route and its layouts before it decides anything is wrong - so it catches the genuine gaps and stays quiet on valid code.
<svelte:head> resolution
Reads title, meta, and JSON-LD declared in <svelte:head> across a route and its layouts, so inherited meta is never flagged.
Load functions and layout inheritance
Understands metadata fed from +page.ts or +page.server.ts load into <svelte:head>, and resolves what a +layout.svelte provides to child routes.
SSR vs CSR
Flags routes that disable SSR (ssr = false) so their content and meta never reach crawlers, and tags added only on the client in onMount.
Structured data validity
Validates JSON-LD injected with {@html}, and checks entity schema for @id and sameAs - the signals that power rich results and AI citations.
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-provided <svelte:head> tags and load-driven meta do not trigger findings - so the review is signal, and your team keeps trusting it.
How it works
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.
Install in one click
Add SEOCode to your SvelteKit repo or whole org. Nothing to configure, it detects the framework automatically. Prefer your own pipeline? Use the @qobi/seocode CLI instead.
Open a pull request
SEOCode reviews the changed files, resolves your metadata, and runs the full ruleset, usually within seconds of the PR opening.
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.
FAQ
Questions, answered.
Does it understand svelte:head and layout inheritance?
<svelte:head> across a route and its +layout.svelte files, so a page is never flagged for meta a layout already provides.Will it catch routes with SSR disabled?
export const ssr = false means crawlers receive an empty shell - SEOCode flags it as a critical SEO regression and points at the route.Will it false-positive on load-driven meta?
<svelte:head>. It flags the real gaps - a route with no <svelte:head> at all, or meta added only in onMount.Can I run it in CI without the GitHub App?
@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?
@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.Get started
Stop shipping SvelteKit 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.