SEO & structured data

Next SEO

MIT-licensed React components for structured data in Next.js projects

garmeeh/next-seoTypeScript8,496 as of 2026-08-02
By Jake Luo · Published Aug 2, 2026

Next SEO is an MIT-licensed React library that renders Schema.org structured data — JSON-LD — inside a Next.js app, with typed components for articles, FAQs, products, breadcrumbs, organizations and more than two dozen other types. Its current line deliberately narrowed: the README now points you at Next.js's own metadata API for ordinary titles and meta tags, and keeps the library focused on the JSON-LD the framework does not generate for you. It removes the boilerplate of structured data, not the judgement about which type a page really is, or whether the values you feed it are still true.

What Next SEO is today

Next SEO (github.com/garmeeh/next-seo) is a TypeScript library, MIT-licensed and maintained since 2018, that gives a Next.js project ready-made components for JSON-LD structured data. You import a component, pass it typed props, and it renders the script tag that tells a search engine what the page is: an article with an author and a date, a product with a price and a return policy, a set of FAQs, a breadcrumb trail, an organization, a video, a job posting. The README documents more than two dozen of them, and a JsonLdScript primitive plus a library of input processors for the Schema.org types it does not cover.

The more interesting fact about the project is what it stopped doing. Next SEO began as the standard way to manage title and meta tags in Next.js, back when the framework had no opinion about them. Since the App Router shipped a first-class metadata API, the framework does that job natively — and rather than compete, the library's README now tells you plainly to use the built-in function for standard meta tags and keeps its own surface on structured data, with the older Pages Router components moved behind a separate import. A dependency that gets smaller when the platform absorbs part of its job is a healthier signal than one that keeps growing.

Where structured data actually helps

JSON-LD is a block of machine-readable claims about a page, sitting alongside the human copy. It is not a secret channel and it does not make a weak page strong. What it changes is how legible your page is to systems that have to decide, without reading it the way a person does, what the page is and whether to reuse it.

  • Eligibility for rich results Some types can change how a listing looks in search — reviews, FAQs, products, events, recipes. Correct markup makes a page eligible; it never obliges a search engine to show anything.
  • Legibility for answer engines Explicit author, date, entity and question-answer pairs give a retrieval system something unambiguous to lift, which is the mechanical half of generative engine optimization.
  • Internal consistency Filling in a typed component forces you to state who wrote a page and when, which is exactly where hand-built sites quietly disagree with themselves.

For a small SaaS or store the useful set is short: an organization or software-application type on the site, article and FAQ types on content, breadcrumbs for structure, and product and review types if you sell physical goods. The library also accepts a nonce on every script it renders, which matters if you run a strict content-security policy — the kind of detail that costs an afternoon when you hand-roll it. Background on the concept itself is in schema markup.

What it does not do

Structured data is not a ranking lever. Google has been consistent that valid markup makes a page eligible for certain presentations rather than ranking it higher, and no amount of it compensates for a page nobody had a reason to open. Treat it as the difference between a page that is understood and a page that has to be guessed at.

Which puts a library like this firmly on the build side of the build-then-grow split. A correctly marked-up page still needs a question worth answering, a reason for someone to link to it, and enough of them to add up to a topic. If you are choosing what to publish rather than how to annotate it, SEO for a brand new website is the upstream decision, and open-seo is the research side of the same job — this is the rendering side.

A first-party note on shipping schema

At AgentCeres — the AI growth team at agentceres.com — we write our JSON-LD by hand in the App Router rather than through a library, so this is a comparison from the other side of the choice. The mistake we made was not syntactic. Our question-and-answer pages originally emitted the QAPage type, which reads like the obvious fit, and it was wrong: that type describes pages where visitors post competing answers, and ours are written by us. We changed them to FAQPage. Nothing about the page changed except the truthfulness of the claim the markup was making — and a library would have rendered the wrong type just as cleanly as the right one.

The second lesson cost more. Markup is a set of claims, and claims go stale silently, because nothing on the page looks broken when they do. Every page in our own /ask, /glossary and /grow sections is a typed entry in source control with a test suite that fails the build on a dangling internal link, an over-long meta title or a missing publish date, so the values feeding the schema cannot drift without someone noticing. Next SEO buys you correct syntax and saves real time; nothing buys you correct facts except deciding which of them are allowed to be typed by hand. That distinction is most of what our SEO content specialist actually enforces.

FAQ

Do I still need Next SEO with the App Router?
For ordinary titles, descriptions and Open Graph tags, no — the framework's own metadata API covers those, and the library's README says so directly. For JSON-LD it is still a genuine convenience: typed props, sensible defaults and a nonce option beat assembling nested Schema.org objects by hand, particularly for product, review or job-posting types with a lot of required fields.
Does structured data improve rankings?
Not directly. It makes pages eligible for richer presentations in search results and easier for retrieval systems to parse, which can lift clicks and citations, but it is not a ranking factor you can lean on. A page with perfect markup and nothing worth reading stays invisible, so it belongs at the end of a content workflow rather than the start.
Can I write JSON-LD by hand instead of using a library?
Yes, and for a handful of page types it is very reasonable — a script tag holding a JSON object is all a component ultimately renders. We do exactly that. The trade is maintenance: hand-written schema drifts from Schema.org changes and from your own data, while a typed component makes a missing required field a compile error instead of a silent omission.
Which schema types matter for a small SaaS or store?
Fewer than most guides suggest. A site-wide organization type, a software-application or product type for what you sell, article types on real content, FAQ types where you genuinely answer questions, and breadcrumbs. Stores should add product, review and return-policy types, since those are the ones that visibly change a listing. Everything else can wait until a page exists that actually needs it.
Related projects
OpenSEOOpen-source alternative to Semrush and Ahrefs — keyword research, backlinks, and site audits on a pay-as-you-go modelDocusaurusOpen-source static-site generator for documentation websites, released by MetaPayloadOpen-source, Next.js-native headless CMS and app framework that installs into your existing app folderWebstudioOpen-source visual website builder — a Webflow alternative you can host yourself

You built it. Now grow it.

AgentCeres is a managed AI marketing team — specialists draft the SEO, social, and outreach that fill your links, you approve what ships. 14-day free trial, from $39/month.

Start free trialMore projects