DevNJ Make your business ease
Column /

Automating structured data maintenance: 5 ways JSON-LD breaks and a 4-stage CI check that stops them (2026)

Column › Site operations

Automating structured data maintenance: 5 ways JSON-LD breaks and a 4-stage CI check that stops them (2026)

Structured data (JSON-LD) is at its most accurate on the day you add it. As theme updates, plugin swaps and new translations pile up, what the page shows and what the JSON-LD says start to drift apart. Because structured data is invisible, nobody notices when it breaks.

This article sets out a system for keeping structured data from breaking. It is not an introduction to writing markup; the focus is "who notices drift, when, and with what". The overall pre-publication quality process is covered in "Automated blog publishing needs a quality gate", search metrics monitoring in "Search Console and GA4 monitoring automation", and bilingual translation and hreflang in "Automating translation and updates on a bilingual website". Here we look only at structured data.

Main sources for this article: Google Search Central's structured data guidelines and documentation changelog, Google's official blog posts from 2023 to 2025, Search Console Help, Schema.org release notes, the W3C JSON-LD 1.1 specification and the HTTP Archive Web Almanac 2024. All were checked on 28 October 2026.

What this article covers Key answer
What has changed Rich results shrinking since 2023; FAQ ended in May 2026 (sections 1 and 4)
How it breaks Templates, missing data, mismatches, retirement, languages (section 3)
How to make it robust Generate it from the same data as the page (section 5)
What to check automatically Four stages in CI, then Search Console (sections 6–7)
Multilingual sites and AI search Align inLanguage with hreflang; nothing special for AI (sections 8–9)
Cost and frequency Three tiers, €0–150 a month; checks per deploy, weekly, monthly, quarterly (sections 11–12)

1. What is happening: fewer rich results, more structured data

The biggest change of the past three years is that Google has adopted a policy of simplifying the results page and keeps reducing the number of rich result types (enhanced displays with stars, steps and so on).

It started with FAQ and HowTo

On 8 August 2023, Google announced that FAQ rich results would be shown only for "well-known, authoritative government and health websites". On 13 September 2023 HowTo rich results stopped appearing on desktop as well, and the type was deprecated. At the same time Google noted that unused structured data causes no problems for Search, so there was no need to remove it in a hurry.

Seven types in 2025, FAQ in 2026

A Google blog post on 12 June 2025 announced that seven types, including Course Info, ClaimReview and Learning Video, would be phased out. The reason given was that they were rarely used and no longer added much value; the post states that rankings are not affected and that uses outside Google Search are not affected either. The Practice problem documentation was removed on 6 January 2026, and FAQ rich results stopped appearing on 7 May 2026 (the documentation was removed on 15 June).

August 2023: FAQ limited to well-known government and health sites. September 2023: HowTo no longer shown. November 2024: sitelinks search box removed. January 2025: breadcrumbs shown on desktop only. June 2025: seven types announced for phase-out. January 2026: Practice problem documentation removed. 7 May 2026: FAQ no longer shown. 2023.08 FAQ limited Gov and health sites only 2023.09 HowTo ended Gone from desktop too 2024.11 Search box ended Sitelinks search box 2025.01 Breadcrumbs: desktop Mobile shows the domain 2025.06 7 types phased out Course Info, ClaimReview etc. 2026.01 Practice problem removed Announced Nov 2025 2026.05 FAQ ended From 7 May; docs removed 15 June
Figure 1: Google's rich result reductions (sources: Google Search Central documentation changelog, August 2023 blog post, June 2025 blog post; checked 28 October 2026)

Meanwhile, structured data use keeps growing

While the displays have shrunk, use of structured data itself has grown. According to the HTTP Archive Web Almanac 2024, the share of pages using JSON-LD rose from 34% in 2022 to 41% in 2024. Even after FAQ rich results were restricted, FAQPage use on desktop rose from 0.2% to 0.6%. Many sites, in other words, still carry types that no longer display.

In 2024, RDFa was used on 66 percent of pages, JSON-LD on 41 percent and Microdata on 26 percent. JSON-LD rose from 34 percent in 2022. RDFa 66% JSON-LD 41% 2022: 34% Microdata 26% Most RDFa is Open Graph (social sharing)
Figure 2: Use of structured data formats (source: HTTP Archive Web Almanac 2024, "Structured Data"; checked 28 October 2026)

RDFa scores high because Open Graph tags for social sharing (64%) count as RDFa. Google recommends JSON-LD, and this article assumes JSON-LD. Note that retired types disappear from Search Console reports and testing tools a little after they stop displaying. Do not mistake "gone from the report" for "error fixed"; that is the first rule of maintenance.

2. What structured data maintenance means: staying in sync, not adding more

Structured data maintenance is the work of keeping what the JSON-LD says correct and consistent with the page at all times. It is not the work of adding new types.

Why it breaks if you leave it alone

Structured data lives apart from the body text, usually in a script element in the head. People who edit the page do not look at the JSON-LD, and whoever wrote the JSON-LD does not hear about page changes. As long as the same information lives in two places, it will drift.

Google's general guidelines require structured data to be a true representation of the page, not mark up content that is not visible to readers, and provide up-to-date information. Violations can lead to a manual action that removes rich result eligibility (Google says this does not affect ranking).

Where it ends and other work begins

This article draws the line with other operational work as follows.

Task Covered here Covered in detail in
Generating, validating, monitoring JSON-LD Yes (main topic) —
Fact-checking and approving each article Only where structured data is involved Quality gate article
Monitoring impressions and clicks Only enhancement reports and search appearance Search Console and GA4 article
hreflang and translation management Only alignment with inLanguage Bilingual site article
CMS and plugin updates Only where updates change JSON-LD Website maintenance automation

Drawing the line is about assigning ownership. Structured data belongs to neither SEO, development nor product data, so it easily ends up owned by nobody.

Accuracy still matters after a display ends

Google's introduction to structured data says it also uses markup to understand page content and to gather information about people, companies and other entities. Rich results are not the only use. A retired type does no harm if it is correct, but does harm if it is wrong. Shift the goal from "getting a display" to "staying accurate" and Google's changes stop throwing you around.

3. Five ways JSON-LD breaks

Structured data breakage falls into roughly five patterns. Each has its own detection tool and its own fix.

Pattern 1: a template change breaks it

The most common case is output changing after a theme or plugin update. Typical forms are duplicate output (an SEO plugin and the theme both emit an Organization), format changes (dates such as 28/10/2026 that are no longer ISO 8601) and missing output (the script element disappears entirely). Google's Article documentation recommends including a time zone in dates; without one, Googlebot's time zone is assumed. For sites publishing in both Japan and Europe, that can make dates appear a day off.

Pattern 2: required properties go missing

Google's feature documentation lists required and recommended properties, and items missing a required property are not eligible for rich results. The cause usually lies in the data: a product image never uploaded, or a price shown as "on request" with no number. Even with a correct template, missing source data means missing JSON-LD.

Pattern 3: it no longer matches the page

The page and the JSON-LD show different prices, or the JSON-LD carries review stars that are not on the page. Sites selling in Europe have an extra trap: the decimal separator. In the Netherlands a price appears on screen as "€ 1.299,00", but Google's Product documentation requires "." as the decimal separator. Pass the display format straight through and €1,299 is read as €1.299.

Pattern 4: retired rich result types linger

A retired type on the page is not a problem in itself. The problem is maintenance effort and misunderstanding. Writing questions into JSON-LD that are not on the page, just to get FAQ results, keeps creating work after the display is gone. And once the type leaves the reports, its errors become invisible.

Pattern 5: languages drift apart

Only one language version gets updated, or inLanguage says "ja" on every page. Translation workflows usually cover body text only, and the JSON-LD falls through the gap. Section 8 covers this.

Pattern Common cause Detected by Fix
1. Template change Theme or plugin update, duplicate output Sample URL checks in CI Block before deploy
2. Missing required property Empty source fields, missing images Rich Results Test, enhancement reports Make fields mandatory at data entry
3. Mismatch with page Duplicate management, formats (decimals) Page-consistency check Generate from the same data
4. Retired type lingers Old implementations chasing displays Changelog review Remove from template
5. Language drift JSON-LD left out of translation Per-language sample checks Store language as data

As the table shows, three of the five (1, 3 and 5) can be made unlikely by template and data design. That is cheaper than catching them with checks.

4. Google's rich result scope: what remains and what has gone

To scope maintenance, you need to know which types Google currently uses. Google's "structured data markup that Google Search supports" page listed 25 entries as of 28 October 2026.

The main remaining types

These are the types most company websites deal with.

Type Typical sites Notes as of October 2026
Article (BlogPosting etc.) Columns, news No required properties; dates and author recommended
BreadcrumbList Almost all Shown on desktop only (since January 2025)
Organization Company sites Nothing required; home or about page is enough
LocalBusiness Shops, offices Opening hours and address must match the page
Product (snippets, merchant listings) Online shops Expanding to shipping and return policies

A typical company site needs to maintain five or six types at most. There is no need to track them all.

Retired types and how to treat them

The seven 2025 types were removed from Search Console reports, the Rich Results Test and the search appearance filters on 9 September 2025. In the bulk data export (BigQuery), the corresponding fields were announced to become NULL by 1 October 2025.

Type Display ended Maintenance approach
HowTo 13 September 2023 Fine to remove from templates
FAQPage 7 May 2026 Remove, or keep only content visible on the page
Sitelinks search box (SearchAction) November 2024 Fine to remove (WebSite itself can stay)
Course Info, Learning Video and 3 others From June 2025 Fine to remove if used only for Search
ClaimReview From June 2025 Check other uses (fact-checking) first
Practice problem Docs removed January 2026 Fine to remove

"Fine to remove" does not mean "must remove". But if you keep it, it must keep matching the page.

5. Designing for generation from templates

The most effective lever for automated maintenance is how markup is generated, not how it is checked. Build JSON-LD from the same data as the page and most of patterns 1, 3 and 5 become unlikely.

Principle 1: one source for each fact

Price, opening hours, author name and publication date should come from the same variable for both the page and the JSON-LD. Google's documentation on generating structured data with JavaScript also recommends, when using a tag manager, not duplicating information but using variables that read values from the page.

Item Bad (managed twice) Good (single source)
Price Page from the CMS, JSON-LD hand-written Output product data price to both
Published and updated dates JSON-LD updated on every save Output front matter date / updated to both
Opening hours Image on page, text in JSON-LD Build both from opening-hours data
Author Company name and job title mixed into JSON-LD Output only the author's name and url
Language Same inLanguage on every page Output from the page locale

What the "good" column has in common is that nobody writes JSON-LD by hand any more.

Principle 2: map page types to schema types

Group pages by type and decide, in one table, which schema types each group outputs. That table becomes your structured data "design document".

Page type Schema types Main data source
Home WebSite, Organization Site settings, company data
Column article BlogPosting, BreadcrumbList Article front matter
Service page Service (if needed), BreadcrumbList Service data
Product detail Product, Offer, BreadcrumbList Product database
Shop or office Specific LocalBusiness subtype Location data
About page Organization (full), AboutPage Company data

Google's Organization documentation says company information can live on the home page or a single about page; it does not need to be on every page.

Principle 3: connect with @graph and @id

Group multiple types with @graph and connect them with @id. Give the Organization a fixed @id and have each article's publisher reference only that @id; then a company name change is a one-place edit. @id is a core feature of JSON-LD 1.1, which became a W3C Recommendation on 16 July 2020.

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#organization",
      "name": "Example B.V.",
      "url": "https://example.com/"
    },
    {
      "@type": "BlogPosting",
      "@id": "https://example.com/en/column/sample#article",
      "headline": "Article title",
      "inLanguage": "en",
      "datePublished": "2026-10-28T09:00:00+01:00",
      "dateModified": "2026-10-28T09:00:00+01:00",
      "publisher": { "@id": "https://example.com/#organization" }
    }
  ]
}

The template fills in the values. Once you choose an @id URL, never change it, and include it in the plan if the site ever moves.

Principle 4: adding markup with JavaScript is a last resort

For products, Google warns that dynamically generated markup can make Shopping crawls less frequent and less reliable, and recommends putting it in the initial HTML. Treat tag-manager injection as a stopgap.

6. Validating in CI: four stages that block a release

If the template itself changes, the generated JSON-LD breaks too. So put a step in CI (automated tests on every change) that checks sample URLs on every deploy and blocks the release on failure.

Stage 1 checks that it parses as JSON, stage 2 that Schema.org types and properties are valid, stage 3 that Google's required properties are present, stage 4 that it matches what the page shows. A failure at any stage blocks the release. 1. Syntax JSON parse 2. Types Schema.org 3. Google Required 4. Match Visible text A failure at any stage blocks the release
Figure 3: Four-stage structured data validation in CI (DevNJ example setup; each stage is based on Google's general structured data guidelines and the Schema Markup Validator; as of 28 October 2026)

Stage 1: syntax (does it parse as JSON?)

Extract every application/ld+json script element and check that it parses as JSON. Trailing commas, or an empty variable producing "price": ,, stop here. If it does not parse, the whole block is ignored. At the same time count whether any type appears twice, which catches duplicate output.

Stage 2: types (is it valid Schema.org?)

Check that the types and properties exist in the Schema.org vocabulary. For manual checks, use the Schema Markup Validator (validator.schema.org). The functions of Google's old Structured Data Testing Tool moved there, and on 9 August 2021 Google turned the old tool into a landing page.

Schema.org is updated about twice a year. As of 28 October 2026 the latest release is Version 30.1 of 16 September 2026 (826 types, 1,540 properties). If CI uses a vocabulary file, record which version you imported and update it every six months.

Stage 3: Google's requirements (are required properties present?)

Valid Schema.org can still miss Google's required properties and be ineligible. For manual checks use the Rich Results Test, but no official API for running it in bulk is documented (as of 28 October 2026). So in CI, check against rules that list Google's required and recommended properties for the types your site actually uses: block on missing required properties, warn on missing recommended ones.

Stage 4: consistency with the page

Open the page in a headless browser, extract values that also appear on the page (price, headline, dates) and compare them with the JSON-LD. This catches the machine-detectable part of the quality guidelines that Google says are "not easily testable using an automated tool".

Stage What it checks On failure False positives
1. Syntax Parses as JSON; duplicate types Block Almost none
2. Types Types and properties exist in Schema.org Block Few (watch vocabulary version)
3. Google Required and recommended properties Block on required, warn on recommended Few (rules need updating)
4. Match Price, dates, headline match the page Block (price, stock), warn (others) Some (format differences)

Stage 4 is prone to false positives from formatting ("€ 1.299,00" versus 1299.00). Normalise numbers and dates before comparing, run it in warn-only mode for the first two to three weeks, then switch it to blocking once you know the noise level.

Choosing sample URLs

You do not need to check every page. Choose representatives for each page type, 10 to 20 URLs in total. For each type, include one "complete" page and one "likely to be missing something" page (no image, freshly translated) to catch pattern 2.

7. Monitoring after release: enhancement reports and URL Inspection

After release, use Search Console to see how Google actually read the page. Data entry mistakes and problems on pages outside your samples show up here.

Reading the enhancement reports

The "Enhancements" section shows a rich result status report per type. Three things to keep in mind: counts are items, not pages; an item with several issues counts once in the invalid total; and the examples table is limited to 1,000 rows. A valid item is one with no critical issues that "can appear" as a rich result; being valid does not guarantee display.

Tracking with the URL Inspection API

The URL Inspection API returns the rich results detected in the indexed version of chosen URLs, along with their issues, so you can pull them weekly. The quota is 2,000 queries per day and 600 per minute per site, ample for a few hundred URLs.

Method What it shows Suggested frequency Caveat
Enhancement reports (UI) Valid and invalid trends per type Weekly Counts items; 1,000 example rows
URL Inspection API Detected rich results and issues per URL Weekly 2,000 per site per day
Performance report, search appearance Rich result impressions and clicks Monthly Disappears when a type is retired

There is not much to look at. Fifteen minutes a week, checking only changes in invalid items and differences in the API results, is a routine that lasts. For search metrics as a whole, see "Search Console and GA4 monitoring automation".

"Fixed" versus "gone from the report"

The easy confusion is between a type disappearing from the report because it was retired and an issue actually being fixed. In BigQuery, fields for retired types become NULL, and Google warns that conditions such as NOT is_learning_videos will drop rows. Write queries that work with NULL, such as IS NOT TRUE, and your reports will survive future retirements.

8. Aligning inLanguage and hreflang on multilingual sites

The typical problem on sites aimed at both Japan and Europe is that the body has been translated but the JSON-LD's language or names still reflect the original.

inLanguage and hreflang do different jobs

inLanguage is a Schema.org property giving the language of the content, as a BCP 47 code. hreflang tells Google where the other language versions are, using ISO 639-1 language codes and ISO 3166-1 Alpha 2 region codes (ja, en, en-NL and so on).

Google says it does not use hreflang or the lang attribute to detect a page's language. Getting them wrong rarely confuses Search's language detection, but other services reading the data will receive the wrong language.

The Japanese page sets inLanguage to ja and the English page sets it to en. The two pages point to each other with hreflang. Both reference one Organization with the same @id. Japanese page inLanguage: ja hreflang="ja" English page inLanguage: en hreflang="en" Both ways Organization (shared @id)
Figure 4: Structured data and hreflang across Japanese and English pages (based on Google, "Tell Google about localized versions of your page" and Schema.org inLanguage; checked 28 October 2026)

Five things to keep aligned

Google's hreflang documentation requires that each language version lists itself and every other version, and that without return links the annotations may be ignored. The structured data should be aligned so that it never contradicts this.

Item Japanese version English version How to check
inLanguage ja en Matches the page locale
hreflang Lists both ja and en Lists both en and ja Points both ways
Article url / @id Japanese URL English URL Matches canonical
Organization @id One shared value One shared value Identical across languages
Name and description Japanese wording English wording Matches the visible text

The last row is easy to miss. Use the registered legal name (in the Netherlands, the name with "B.V.") as the Organization's name and put language-specific trading names in alternateName, so the name does not wobble between languages.

Bring JSON-LD into the translation workflow

If the JSON-LD comes from the same data as the page, the English JSON-LD falls out of the translated data automatically. If hand-written markup remains, add the JSON-LD to the translation scope or move it into templates. Translation pairing is covered in "Automating translation and updates on a bilingual website". In CI, keep sample URLs per language and check that inLanguage matches the locale.

9. Where structured data stands in the age of AI search

We are increasingly asked whether structured data should be added "for AI search". This is an area full of guesswork, so here is only what is officially documented.

What Google officially says

Google's "AI features and your website" page states plainly that there are no additional requirements or special optimisations needed to appear in AI Overviews or AI Mode, and no need for AI text files or special Schema.org structured data. On 15 June 2026 Google added a note that llms.txt is not needed for Google Search and does not affect rankings.

The same page lists, as an SEO fundamental, making sure your structured data matches the visible text on the page. The official answer is to keep what you have accurate rather than add more for AI.

Common claim What is officially documented Maintenance approach
AI needs dedicated structured data No special Schema.org structured data needed Not a reason to add types
You should publish llms.txt Not needed for Google Search; no ranking effect Fine to keep for other services
FAQPage gets you cited by AI FAQ rich results ended May 2026; nothing on AI use Keep only if it matches the page
Structured data should match the page Structured data should match visible text Checked by stage 4 in section 6

There is no need to change your maintenance approach because of AI search. How AI services other than Google use markup should not be built into your design on guesswork unless they document it. One exception worth keeping: your Organization's legal name, logo and identifiers (in the Netherlands, the KvK number) help Google, as its documentation explains, distinguish you from organisations with similar names, so keep them maintained regardless of any display.

10. Points to watch when operating in Europe

Sites that sell in both Japan and Europe face Europe-specific conditions in their structured data too. Here are three.

Price rules and structured data prices

Following the EU Omnibus Directive, the Netherlands has applied since 1 January 2023 a rule that the "was" price for a discount must be the lowest price of the previous 30 days, and the Dutch Authority for Consumers and Markets (ACM) has fined online shops for breaches. Google's Product documentation shows how to mark the original price as StrikethroughPrice. If the page's "was" price and the structured data's strikethrough price come from different data, one of them can end up out of line with the law.

Digital Product Passport and EEA displays

According to the European Commission, the EU Digital Product Passport (DPP) registry went live on 20 July 2026, and the passport becomes mandatory for certain batteries from 18 February 2027. Schema.org 30.1 added vocabulary to link products to a DPP, but Google has not said whether Search will use it. Hold the data for legal compliance and decide separately whether to output it as structured data. In the EEA, as part of Google's response to the Digital Markets Act, structured data carousels (beta) have appeared for travel, local and shopping queries since 2024.

Japan and Europe compared

Item Japan-facing Europe-facing
Price format "1,299円" → 1299 "€ 1.299,00" → 1299.00 (watch the decimal)
Reference price for discounts Japan's misleading representations rules on dual pricing Lowest price of previous 30 days (Omnibus)
Special search displays Standard rich results Structured data carousels in the EEA (beta)
Time zone in dates +09:00 +01:00 (+02:00 in summer)

The same template can face different value formats and different rules those values must satisfy by region. If you sell in both, always include price and date normalisation in stage 4.

11. Review frequency and checklist

Even with automation, some things still need a person. Decide what is checked, how often and by whom.

Suggested frequency

The more costly a mistake (price, stock), the more often it should be checked, and those checks should block every deploy.

Frequency What to check Owner Time needed
Every deploy Four CI stages (10–20 sample URLs) Automatic (development on failure) Minutes (automatic)
Weekly Invalid items in enhancement reports; URL Inspection API diffs Operations 15 minutes
Monthly Manual actions; search appearance trends Operations 30 minutes
Quarterly Google changelog, new and retired types, refresh sample URLs Development and operations 1–2 hours
Every six months Update Schema.org version; review the design document Development 2–4 hours

Times are DevNJ estimates. The goal of automation is a state where 15 minutes a week is enough.

12. Cost and effort ranges

The following are DevNJ estimates, not statistics. Outsourced work is priced at €80 an hour; the Japanese version of this article converts at €1 = ¥175.

Tier Scope Initial effort Monthly (tools)
1. Clean-up and basic checks Consolidate templates, remove duplicates, syntax and type checks 8–16 hours (€640–1,280) €0
2. CI and weekly monitoring Google requirements and page-match checks, weekly URL Inspection API pulls 20–40 hours (€1,600–3,200) €0–20
3. Multilingual and large scale Per-language samples, crawling thousands of URLs, product data reconciliation 40–80 hours (€3,200–6,400) Roughly €20–150

Tier 2's monthly cost is roughly any CI minutes above the free allowance; tier 3 depends on whether you use your own crawl server or a paid crawler.

Comparing with manual work

Measure the value of automation in people's time and days until detection rather than tool fees.

Item Checked by hand Automated to tier 2
Monthly review time 6–10 hours (running samples through tools by hand) 1–2 hours (15 min a week plus quarterly review)
Time from breakage to detection Weeks to months (after displays vanish) Blocked at deploy; at most a week if missed
Duplicate output, format changes Hard to notice Stopped at stages 1 and 4
Keeping up with Google changes Depends on someone's memory Checked at the quarterly review

Going from 6–10 hours to 1–2 hours a month frees up roughly €320–720 of time a month at €80 an hour. Costs move towards the top of each range if much is still hand-written, if three or more plugins output structured data, if there are three or more languages, or if there are thousands of products.

13. Common mistakes

Here are the mistakes we see most often, with causes and fixes. All of them are cheaper to prevent by design than to catch by testing.

Mistake What happens Fix
Duplicate output from plugin and theme Conflicting Organization or Article blocks Let only one emit it; count duplicates in stage 1
dateModified updated on every save Updated date changes without content changes Output only from the page's updated field
Passing the display price format through €1.299,00 read as 1.299 Output numbers from raw data; format only on screen
FAQ in JSON-LD that is not on the page No display, and a guideline mismatch Keep only visible questions, or remove
Reading "gone from report" as "fixed" The type was retired; issues just became invisible Check the changelog for retirements
Only the English JSON-LD is stale Company name or price differs by language Generate from translated data

The second row also relates to Google's people-first content guidance, which lists changing dates without substantially changing content as a sign of search-engine-first content.

What not to do

These are the things to avoid when automating maintenance.

Don't Why
Put reviews or stars only in structured data Manual action removes rich result eligibility
Add lots of types "for AI search" Officially unnecessary; only widens maintenance
Delete JSON-LD to make a failing check pass Hides pattern 2; the data problem remains
Change @id URLs at every redesign Breaks the links between organisation and articles

14. Worked examples (three fictional companies)

The following three companies are fictional and illustrate how far each would automate. They are not real businesses.

Company (fictional) Situation Tier First step
A: Japanese machine-parts maker, 40 staff Japanese and English site with columns; two plugins output markup 1 → 2 Remove duplicates; one Organization
B: Dutch online shop for Japanese food, 800 products Japanese, English and Dutch; prices and stock change daily 2 → 3 Single price source; decimal normalisation
C: Language school in The Hague English and Japanese; course and event pages 1 Drop retired Course Info; tidy Event

Company A only needs to stop the duplicate output and consolidate company information into one Organization, which fits within about 12 hours and €0 a month. Company B had "€ 12,50" flowing into its JSON-LD, so it regenerates prices from numeric data and outputs the 30-day "was" price from the same data. Company C has few pages, so tier 1 is enough.

15. Rollout plan: four weeks

Here is a four-week rollout. Each week's work is roughly one to two days.

  1. Week 1: inventory. Group pages by type and pick two sample URLs each. List each JSON-LD type and what produces it (theme, plugin, tag manager, hand-written), and flag duplicates and retired types
  2. Week 2: design document and templates. Create the page-type-to-schema table and move price, dates and language onto the same data as the page. Decide the Organization @id
  3. Week 3: four CI stages. Make stages 1 and 2 blocking; start stages 3 and 4 in warn-only mode
  4. Week 4: monitoring and routine. Set up weekly URL Inspection API pulls, assign an owner and a day for the enhancement reports, and schedule the quarterly review
  5. Week 5 onwards: switch over. Once you know the false-positive level, make missing required properties and price or stock mismatches blocking

The key is not to block everything from day one. If noisy checks keep stopping releases, people will want to remove the checks altogether.

16. Checklist

Check these at rollout and every quarter.

Design

  • A design document maps page types to schema types
  • Price, dates, opening hours, author and language come from the same data as the page
  • No type is emitted by two mechanisms (such as theme and plugin)
  • The Organization has one @id, identical in every language

CI

  • Sample URLs exist per page type and per language, 10–20 or more in total
  • Releases are blocked when JSON does not parse or a type is duplicated
  • The Schema.org vocabulary version is recorded and updated every six months
  • Missing Google-required properties block; missing recommended ones warn
  • Price and stock are compared with the page, with decimals and currency normalised

Monitoring and operations

  • An owner and a weekday are set for reviewing enhancement reports
  • Sample and key URLs are pulled weekly through the URL Inspection API
  • The Google changelog is checked quarterly for the types your site uses
  • inLanguage and hreflang are aligned on every language version and point both ways

17. Summary

  • Structured data is most accurate on the day it is added and drifts from the page if left alone. Aim for "never say anything wrong" rather than "get a display"
  • Google has been reducing rich results since 2023; HowTo ended in September 2023 and FAQ on 7 May 2026. Unused markup does no harm, but it still needs maintaining
  • The five breakage patterns are template changes, missing required properties, mismatches with the page, retired types and language drift. Three of them become unlikely if markup is generated from the same data as the page
  • On every deploy, run four CI stages (syntax, types, Google's requirements, page match); after release, review enhancement reports and the URL Inspection API weekly
  • On multilingual sites, align inLanguage, hreflang and the Organization @id; for Europe, watch decimal separators and the 30-day lowest-price rule
  • Google states that no special structured data is needed for AI search. Keeping what you have accurate comes first

Sources

Google Search Central (structured data)

Google Search Central (multilingual, AI, quality)

Search Console

Schema.org, W3C and research

European rules

All sources were checked on 28 October 2026. The types and requirements Google supports change, so check the official changelog for the latest before implementing. Costs, effort and review frequencies are DevNJ's working estimates and vary with site size and setup.

FAQ

How do I find structured data errors?
Before publishing, check a sample URL for each page type with the Rich Results Test and the Schema Markup Validator, and run the same checks in CI (automated tests before each deploy) every time. After publishing, look at the Search Console enhancement reports (rich result status reports) once a week for changes in invalid items, and use URL Inspection on anything suspicious. The reports count items, not pages.
Should I remove FAQ or HowTo structured data?
There is no rush. Google stopped showing HowTo rich results on 13 September 2023 and FAQ rich results on 7 May 2026, but it says structured data that is not used causes no problems for Search. It still costs maintenance, though, so the practical approach is to remove it the next time you touch the template, or keep only questions and answers that are visible on the page.
Where should I start with automating structured data maintenance?
First, consolidate the JSON-LD on your site so that each page type is generated from one template. Then pick 10 to 20 sample URLs across page types and check four things in CI: does it parse as JSON, are the Schema.org types and properties valid, are Google's required properties present, and does it match what is shown on the page. Finally, add a weekly Search Console check.
On a multilingual site, how should inLanguage and hreflang line up?
On each language version, set inLanguage to that page's own language using a BCP 47 code (ja, en and so on), matching the language in its hreflang value. hreflang requires each version to list itself and every other version; one-way links may be ignored. Use the same @id for your Organization in every language so that it is understood as one organisation.
Do I need special structured data to appear in AI search (AI Overviews or AI Mode)?
Google's official documentation says you do not need new machine-readable files or any special Schema.org structured data to appear in AI Overviews or AI Mode. It does list, as a standard SEO practice, making sure your structured data matches the visible text on the page. Keeping your existing structured data accurate comes before adding anything for AI.
How much does automating structured data maintenance cost?
As a DevNJ estimate: consolidating templates and adding syntax and type checks takes 8 to 16 hours and €0 a month; adding CI checks for Google's requirements and on-page consistency plus a weekly Search Console review takes 20 to 40 hours and €0 to €20 a month; covering multiple languages, thousands of URLs and product data reconciliation takes 40 to 80 hours and roughly €20 to €150 a month.

Planning a site that has to work in both markets?

Get in touch

Contents