What we did on woofocus.com
- •One organization, one ID. Our homepage and our Kingston page describe the same business under a single
@id, with our logo, address, opening hours and profiles. - •The right type on each page. WebPage and BreadcrumbList on our pages, Service on service pages, Article on articles, and FAQPage only where a visible FAQ exists.
- •We removed our own rating markup. Our client rating stays on the page as text. Google does not show review stars for reviews a business publishes about itself, so marking them up adds risk and no benefit.
- •A connected sister brand. Trialsfocus, our clinical trials studio, names Woofocus Ltd as its parent organization, so the relationship between the two sites is stated in the markup.
Every other page should point to the organization’s ID instead of describing us again. When we checked our own pages, we found two places where they did not. Each service page wrote its provider out as a separate organization instead of pointing to our ID, and validators do not flag that, because both versions are valid. And our WordPress blog’s SEO plugin was describing us by an old tagline, because plugins take the organization name from the WordPress site title.
Our rules
These come from our own standards and from a large rebuild where every template is getting new markup.
- 01Describe the organization once, in full, on the homepage. Everywhere else, reference it by
@id. - 02One Person per author, with the same
@idon their articles and their author page, andsameAslinks to real profiles. - 03Never invent a field. If a course has no fixed start date, the markup does not get one.
- 04No LocalBusiness markup without a real address. A page that targets a city is not a branch.
- 05No self-serving ratings.
- 06Job postings come down when the role is filled.
- 07VideoObject only where there is a real video file.
- 08FAQPage only when the FAQ is on the page, word for word. Google stopped showing FAQ rich results on May 7, 2026. The markup can stay, but we no longer add it expecting a search benefit.
- 09Structured data goes in the raw HTML, not injected after the page loads, so crawlers that do not run JavaScript can still see it.
From our logs
A full rebuild, template by template. For a WordPress to Next.js rebuild, an AI-drafted audit mapped the markup on every template. It found case studies marked up as generic web pages, eleven location pages carrying nothing but organization markup, a careers page with no job posting markup, and article markup with four fields and an image still on the old domain. Our developer checked every finding against the code and built the new markup in six phases. People also had to correct the draft. It gave the client the founding year of a different organization. And local business markup was proposed for location pages that are not physical branches, which rule 4 above does not allow. The work is still in testing, and testing has already earned its keep: on the staging site, the JSON-LD was missing from the raw HTML.
Authors across a news network. For a group of US news sites, we added Person markup to every author page, with sameAs links to each journalist’s Muck Rack, X and LinkedIn profiles. The SEO plugin already supported most of it. Muck Rack went in through a filter and a new profile field on every site. The author markup was checked in the Rich Results Test and the Schema Markup Validator. Earlier, breadcrumb markup went in across the same sites, together with visible breadcrumbs on every post.
Job postings written by a plugin. A UK recruitment firm’s job board plugin generates its JobPosting markup. When Search Console flagged a missing applicantLocationRequirements field on its listings, we reproduced it in the Rich Results Test and took it to the plugin’s developers with the test links. Their answer: the field is only needed for remote jobs. The options went back to the client. When a plugin writes your markup, someone still has to read Search Console.
Custom markup on Elementor. A Florida contractor’s service pages need custom FAQ and service markup that survives editing. From our proposal: “an HTML widget inside the page is exactly what Elementor drops on re-save, so I output the JSON-LD from a snippet hooked to wp_head and keyed to the page ID, generated from the same source as the visible FAQ.” The acceptance test is zero errors when the pages are validated.
Two descriptions of one page. On a site we reviewed in September 2026, one page carried both the SEO plugin’s markup and a block of custom JSON-LD, each declaring its own WebPage. The fix is to switch off the plugin’s output wherever custom markup exists, and then check that every page carries one organization or person entity, not two.
The author was the admin account. On a press release site, the author named in the markup was the admin account’s display name. Check yours.
How we check it
- •The Schema Markup Validator for every type, because it checks against schema.org itself. The Rich Results Test stopped checking FAQ markup in June 2026.
- •Google’s Rich Results Test for the types Google still supports.
- •The raw HTML, fetched with JavaScript off, to confirm the markup is there before any script runs.
- •The visible page and the markup side by side: breadcrumbs, names and dates should match.
- •On migrations, the original publish dates stay, and
og:urlmatches the canonical. See website migration SEO. - •Search Console’s enhancement reports, weekly for the first four weeks after a launch.
Schema is one section of our SEO audit checklist, and product markup has its own notes on our WooCommerce SEO page.
What schema won’t do
It will not rank a page by itself, and it does not guarantee rich results. Google decides what to show.
Many older guides still sell FAQ markup as a way to take up more space in search results. For most sites that ended in August 2023, when Google limited FAQ rich results to well-known government and health websites, and since May 2026 Google does not show them for anyone. We don’t publish click-through gains from schema, because we have not measured any.
Frequently asked questions
Doesn’t Yoast or Rank Math handle schema already?+
For the basics, yes: organization, website, pages, articles and breadcrumbs. The problems start with services, authors, job postings, products and custom post types, and wherever plugin output and custom code overlap. On the news network above, the plugin covered most of the author markup and a filter covered the rest.
Is FAQ schema still worth adding?+
Not for search appearance. Google stopped showing FAQ rich results on May 7, 2026, and says existing markup can stay. We keep it only where the FAQ is visible on the page.
Should every page have LocalBusiness markup?+
No. Only a real location with a real address. City landing pages are not branches.
Can AI write my schema?+
It drafts quickly and invents confidently. In one draft, it gave a client another organization’s founding year. We use AI for the first draft, and a person checks every fact against the source.
How do you add custom schema on Elementor?+
From code rather than from a widget on the page: a snippet hooked to wp_head, keyed to the page ID and built from the same source as the visible content, so an editor’s re-save cannot drop it.
Will structured data get my products review stars?+
Only reviews from real customers, marked up on the product page under Google’s rules, can be eligible, and Google still decides whether to show them. We do not mark up reviews a business writes about itself.
Sources
- Google Search Central, FAQPage structured data
- Google Search Central, Review snippet structured data
- Google Search Central, Job posting structured data
- Schema.org, Schema Markup Validator