Structured Data Schema Checklist: How to Write Article/FAQ/Product/Breadcrumb
1. General rules for writing JSON-LD
Google recommends JSON-LD syntax, not Microdata or RDFa. There are three hard rules.
| Rule | The right way | What not to do |
|---|---|---|
| Syntax | <script type=”application/ld+json”> | Use Microdata or RDFa |
| Location | End of head or body | Inject dynamically with JS, then wait for rendering |
| Field values | Match the visible text on the page word for word | Schema says “$999”, page says “Request a quote” |
| Multiple types | Use a @type array or link with mainEntityOfPage | Pile six or seven unrelated types on one page |
Why JSON-LD: it’s decoupled from the HTML structure, so maintaining templates won’t break the markup when you change the DOM. Microdata is embedded in tag attributes, so changing one class can break it too.
Two more things people often overlook: first, all date fields must use ISO 8601 format with a timezone offset, like 2026-09-21T09:00:00+08:00, not “September 2026”; second, URL fields must be directly crawlable by Google, so don’t use backend links that require login. These two issues only show warnings in the Rich Results Test, not errors, so they’re easy to miss.
2. Article: blog and whitepaper pages
Article is the basic markup for article pages. It determines whether the author avatar, publish time, and thumbnail carousel appear in the SERP.
| Field | Required | Example value | Description |
|---|---|---|---|
| @type | Yes | Article | Use NewsArticle for news |
| headline | Yes | No more than 110 characters | Match <title> |
| author | Yes | {“@type”:”Person”,”name”:”Cui Lishu”} | Also link to the author page |
| datePublished | Yes | 2026-09-21T09:00:00+08:00 | ISO 8601 format |
| dateModified | Recommended | Same as datePublished or the update time | Update when you refresh the article |
| image | Yes | At least 1200×675 pixels | Affects the carousel thumbnail |
| publisher | Recommended | Linked to Organization | Includes a logo field |
Example: a B2B blog added Article but used a small 600×300 image, and the Rich Results Test reported “image too small”. After switching to a 1200×675 cover image, it appeared in the SERP article carousel within a week. For image size requirements, see Media Asset Governance.
Don’t just put the company name in the author field. Use a specific author name and link it to an author page. Google reads this field for knowledge panels and author carousels. Writing only “crater” doesn’t qualify as a Person or an Organization, so the markup gets ignored. The author page itself must be accessible on your site, and you should link external profiles like LinkedIn and GitHub in sameAs.
3. FAQPage: The Main Channel for AI Answers
Although FAQPage no longer shows rich results in SERPs for ordinary business blogs after 2023, it remains the primary channel through which ChatGPT, Gemini, and Google AI Overviews read Q&A content.
| Field | Required | Description |
|---|---|---|
| @type | Yes | FAQPage |
| mainEntity[] | Yes | Array of 5 to 6 Question items |
| name | Yes | The question text, matching the page summary |
| acceptedAnswer.text | Yes | Plain-text answer, matching the visible answer on the page |
Counterintuitive point: FAQPage SERP accordions have only appeared on authoritative forums and government sites since August 2023. Adding them to an ordinary B2B blog won’t display anything. But you should still write them — the mainEntity array is the primary channel AI engines use to read FAQs. For FAQ content methodology, see FAQs and People Also Ask.
Red line: The Q&As in mainEntity must exactly match the visible FAQ on the page. Never include Q&As that don’t exist on the page. Google’s manual action for FAQ spam targets exactly this.
Pay attention to question and answer length too: keep questions between 20 and 40 characters, and answers between 80 and 150 characters. Questions that are too short look like keyword stuffing; too long and they exceed the SERP accordion display range. Answers that are too short lack information density and won’t be cited by AI; too long and they get truncated.
4. Product: The High-Yield Zone for B2B Product Pages
Product markup determines whether product cards, prices, and stock status appear in SERPs. Be restrained with B2B semi-custom products.
| Field | Required | B2B Considerations |
|---|---|---|
| name | Yes | Full product model name, matching the H1 |
| image | Yes | Main image; at least 3 product images is safer |
| description | Recommended | Matching the product page meta description |
| brand | Recommended | {“@type”:”Brand”,”name”:”…”} |
| offers.price | When there’s a clear price | Don’t fill in price for quote-based products |
| offers.availability | Recommended | InStock / PreOrder — don’t mislabel |
| aggregateRating | When there are genuine reviews | Fake star ratings will trigger a manual action |
Scenario example 2: A B2B equipment manufacturer’s product page set offers.price=5000, but the page only said “Request a Quote.” Rich Results Test flagged a field mismatch warning, and two weeks later the GSC rich results report showed zero rich result impressions for that product page. After deleting the price field and changing availability to PreOrder, impressions recovered.
Price field mismatches are the most common source of Product markup accidents. When B2B semi-custom product pages don’t publish quotes, don’t force in a price just to get a SERP card.
5. BreadcrumbList: A Must-Have Site-Wide
BreadcrumbList lets Google display breadcrumbs instead of long URLs in SERPs. It’s the lowest-cost Schema across your entire site.
| Field | Required | Description |
|---|---|---|
| @type | Yes | BreadcrumbList |
| itemListElement[] | Yes | The full path from homepage to current page |
| position | Yes | Starts at 1 and increments |
| name | Yes | Breadcrumb display text |
| item | Recommended | Absolute URL for that level |
The item field must use an absolute URL, not a relative path. The hierarchy must match the breadcrumb visible on the page: Home → Section → Subsection → Current page, with no levels skipped. The current page itself must also be included in itemListElement, otherwise Google can’t confirm which page the breadcrumb points to.
6. Three checks before launch
| Steps | Tools | Timeframe | Pass criteria |
|---|---|---|---|
| Validate URL by URL | Rich Results Test | On the day before deployment | No errors, only acceptable warnings |
| Spot-check after launch | Run the live URLs again | Launch day | Rendered output matches local |
| Rich media report | Search Console | Days 7, 14 and 30 | Impressions non-zero, errors at 0 |
These four Schema types are the baseline for a B2B website. Organization and WebSite are the other two that must go in the head of every page site-wide. For the full priority breakdown, see Structured data (Schema). Multilingual sites must also make sure Schema fields match Multilingual Number and Table Localization so currency and units don’t get mixed up across languages.
The last common source of trouble is duplicate Schema generated automatically by plugins. Once a WordPress site has Yoast or Rank Math installed, the plugin outputs Article and Organization markup by default. If you also hand-write a set of JSON-LD, you’ll get duplicate field warnings. Before launch, run the Rich Results Test on your product and post pages. If you see duplicate fields, turn off the corresponding plugin module and keep your hand-written set.
7. Monthly checkups after Schema goes live
Schema isn’t something you write once and forget. Template changes, products going on and off sale, and price adjustments all push fields out of sync with what’s visible on the page. Spending half a day on a checkup each month is far less work than fixing things after an incident.
| Checkup item | How to check | Frequency | Pass criteria |
|---|---|---|---|
| GSC rich media report errors | Search Console experience report | Monthly | 0 errors; warnings are acceptable |
| Fields match visible text | Run Rich Results Test on a sample of 10 pages | Monthly | No field mismatch warnings |
| Product price sync | Compare the price field on product pages with the listed price | After a price change | Quote-based products should have no price field |
| Breadcrumb path | Compare breadcrumbs on a sample of second-level pages | After a redesign | No levels skipped; item is an absolute URL |
| Duplicate Schema | Check the number of ld+json blocks in the page source | After installing a new plugin | No duplicate output from plugins and hand-written code |
When a checkup turns up a problem, don’t rush to change the whole site. Reproduce it in a staging environment first and confirm whether it’s a template issue or a single-page issue. Template issues affect every page, so fixing the template once is enough. Single-page issues are usually a content editor slipping up on a price or date, so fix them page by page. Log each monthly checkup on a single sheet. After three months you’ll see which errors keep coming back, and you can write them into the content editor handbook to cut down on repeat incidents at the source.
One last reminder: Schema is for search engines and AI engines to read, not for visitors. Field values must honestly reflect what’s actually on the page. Don’t fake prices or inflate review ratings just to chase rich results. Once Google issues a manual action for spammy structured data, recovery takes quarters, not weeks. It’s not worth it.
For multilingual sites, keep Schema fields consistent with the page language. On English pages, fill JSON-LD fields in English; on Chinese pages, fill them in Chinese. Don’t mix the two. The currency field must match the currency shown on that language version, so don’t put USD on pages aimed at European customers. Always use ISO 8601 for dates instead of ambiguous local formats like “9/21/2026”. The Rich Results Test won’t flag these details, but they do affect how accurately AI engines extract your data.
FAQ
Can the Article headline field be longer?
Can FAQPage have more Q&As than the page shows?
The Product page doesn’t publish prices. How should I write offers?
Can BreadcrumbList item fields use relative paths?
Can a single page carry both Article and BreadcrumbList?
How long after Schema goes live do rich results show up?
Final thoughts
These four core Schema types are the minimum viable set for a B2B website: Article for blog posts, FAQPage for AI answers, Product for product pages, and BreadcrumbList sitewide. Get them right and you may still not get rich results; get them wrong and you definitely lose eligibility.
Three steps to launch: this week, audit 5 template pages with the Rich Results Test and list the missing types; next week, add the four JSON-LD templates to the head, matching field values word-for-word with the visible text; on day 30, confirm zero errors in the Search Console rich results report.
One line worth remembering: schema isn’t about how much you add, it’s about how accurate it is. Fields match the page, numbers match the quote, Q&A matches the FAQ, and only then will rich results come calling.
