For Remix teams
Catch Remix SEO bugs in the pull request, not in Search Console.
SEOCode reviews every PR against a Remix-aware ruleset. It understands the meta export, loader-driven metadata, and nested-route merging, so it flags the real regressions - a route missing its meta export, an accidental noindex, tags set only on the client - without false-flagging your valid dynamic patterns.
Free on the Developer plan, full ruleset on every pull request. Works with Remix v2 and React Router 7 framework mode.
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
Remix spreads your SEO across nested routes and loaders.
Each route owns its meta export, meta merges down the nesting tree, and titles come from loader data. Any of it can break without failing the build - you find out weeks later. These are the failure modes SEOCode was built to catch.
A new route ships with no meta export
Add a route module and forget its meta export, and the page falls back to a parent's tags, or none. No error - just a page competing on the wrong title.
Nested-route meta that doesn't merge
A child route's meta replaces rather than merges with the parent, silently dropping the canonical or Open Graph tags the layout route set.
Meta set in a client effect
Tags injected from a useEffect in a component appear only after hydration; the server response crawlers read has none of them.
Broken JSON-LD from loader data
Structured data returned from a loader and rendered by hand can emit invalid JSON that search engines silently discard.
An accidental noindex from a parent route
A robots meta descriptor in a shared parent route de-indexes every child rendered under it.
Framework-aware
It reads your source the way Remix does.
SEOCode parses your route modules, not just rendered HTML. It resolves the meta export and how nested routes merge before it decides anything is wrong - so it catches the genuine gaps and stays quiet on valid code.
The meta export
Reads the meta export (the v2 descriptor array) per route, so a route that sets its title there is correct; a route that exports nothing is flagged.
Loader-driven metadata
Understands meta built from loader data via the data and matches arguments, so dynamic titles from a loader are recognised, not flagged.
Nested-route merging
Resolves how meta from parent and child routes combines, catching tags a child drops or duplicates across the nesting tree.
Structured data validity
Validates JSON-LD built from loader data, 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. Loader-driven titles and correctly merged parent-route 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 Remix 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 the meta export and nested routes?
meta export per route and resolves how parent and child route meta merges, so a route is never flagged for tags a parent already provides.Will it false-positive on loader-driven meta?
data and matches arguments. It flags the real gaps - a route with no meta export, or tags set only in a client effect.Does it support Remix v2 and React Router 7?
meta descriptor array used by Remix v2 and by React Router 7 in framework mode, so it stays correct whether your app is on Remix or has migrated to React Router 7.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 Remix 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.