Payload had no structured data plugin. So we built one.
When we checked npm and the Payload Directory in early October, there was no plugin for Schema.org structured data. Today we're releasing version 0.1.0 of ours, free and MIT licensed.
The gap:Meta tags are only half the job
Payload's official SEO plugin handles titles, descriptions and social images. It doesn't touch structured data, the JSON-LD that tells Google and AI assistants who you are, what a page is and how it fits into your site.
So every Payload site that wants it ends up hand-rolling it. We did exactly that for lavine.dev: a utility file, a component, and our company details hard-coded into the layout. It worked, but changing our address meant a code deploy, and none of it was reusable on client sites.
The plugin:Business details in the admin, types in config
@lavinedev/payload-plugin-structured-data moves all of that into Payload. You fill in your business details once, in a settings screen in the admin: name, logo, address, social profiles, areas served, company number. Every page then carries an Organization (or LocalBusiness) and WebSite node built from them.
In your config, you give each collection a default type. Blog posts become BlogPosting, service pages become Service, everything else WebPage. Editors can change the type or switch it off for a single page from the sidebar, and a preview there shows the exact JSON the page will output.
FAQ blocks turn into FAQPage markup automatically, and breadcrumbs come from Payload's nested docs plugin or a function you supply. Each page gets one connected graph, so the article's publisher points at your organisation rather than repeating it.
The rules:Bad data never breaks a page
The rule we cared about most: structured data must never take a page down. If a field is missing or a value is malformed, the plugin skips that part, logs a warning in development and renders the rest.
We saw it work during this release. A preview build ran before its database change, so the settings read failed. The page still rendered and still passed its checks, minus the organisation details. We spotted it in the JSON-LD, rebuilt, and moved on.
The proof:Running on lavine.dev since the beta
lavine.dev has run the plugin since the first beta on 8 October. Google's Rich Results Test and Search Console report it valid, with no errors on any page type.
The beta picked up a couple of hundred downloads from npm in its first two weeks. Version 0.1.0 adds one thing Google kept asking for: an image for your organisation, which falls back to your logo if you leave it empty.
The bottom line:Install it, then fill in one screen
If you run a Payload 3 site on Next.js 15 or 16, setup is one plugin entry, one component in your page templates and five minutes in the admin. The code is on GitHub at stevenlavine/payload-plugin-structured-data, and issues and pull requests are welcome.
Search engines and AI assistants read structured data, and now a Payload site can publish it without a line of hand-written JSON.
Steve Lavine is a full-stack developer and founder of Lavine Web & AI Solutions, working with SMEs and startups across the UK. lavine.dev