cd /news/developer-tools/schema-org-json-ld-the-complete-patt… Β· home β€Ί topics β€Ί developer-tools β€Ί article
[ARTICLE Β· art-12848] src=dev.to β†— pub= topic=developer-tools verified=true sentiment=Β· neutral

Schema.org + JSON-LD: the complete pattern reference

This article serves as a comprehensive reference for implementing Schema.org structured data using JSON-LD, emphasizing its critical role for Google, AI crawlers, and SERP features in 2026. It details the modern "@id graph pattern" for cross-referencing entities, explains how AI search engines use schema for entity extraction, and stresses that invalid schema is penalized more harshly than having none. The guide covers implementation across various frameworks, validation tools, and key schema types, positioning structured data as a non-optional foundation for search visibility.

read18 min views30 publishedMay 24, 2026

Originally published atPart of ThatDevPro's open SEO + AI framework library.[thatdevpro.com].[ThatDevPro]is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit:[github.com/Janady13/aio-surfaces].

JSON-LD Implementation, the @id Graph Pattern, Per-Page Type Selection, and Validation

A comprehensive installation and audit reference for structured data β€” the machine-readable layer that tells Google, AI crawlers, and other consumers what entities a page is about and how they relate. Every meaningful SERP feature, AI citation, and Knowledge Panel claim depends on this layer being correct. Dual-purpose: installation manual and audit document.

Cross-stack implementation note: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see[. For pure client-rendered SPAs (no SSR/SSG) see]framework-cross-stack-implementation.md

[. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see]framework-react.md

[.]framework-tailwind.md

1. Document Purpose #

This is the canonical reference for schema.org structured data implementation. Schema is no longer optional in 2026 β€” it is the foundation that lets Google's Knowledge Graph populate, AI search engines extract claims, and SERP rich results render. A site without proper structured data is invisible to half of modern search.

Schema in 2026 differs from schema in 2020 in three critical ways. First, the @id

graph pattern (cross-referenced nodes within a single @graph

block) has overtaken the older "one schema block per page" approach because it lets entities reference each other across the site. Second, AI search engines (ChatGPT, Perplexity, Claude, Gemini) rely on schema as a primary signal for entity extraction β€” accurate schema increases citation likelihood. Third, validation is non-negotiable: invalid schema is worse than no schema, because Google penalizes spam markup.

1.1 Required Tools

Google Rich Results Testβ€”search.google.com/test/rich-results

β€” primary validator - Schema.org Validatorβ€”validator.schema.org

β€” comprehensive validator (accepts more types than Google's tool) - Google Search Console β€” Enhancements sectionβ€” sitewide schema health monitoring - Yandex Microdata Validatorβ€”webmaster.yandex.com/tools/microtest/

JSON-LD Playgroundβ€”json-ld.org/playground/

β€” for graph experimentation - Schema App/** Schema Pro**β€” paid tooling for non-developer environments - Yoast SEO/** Rank Math**β€” WordPress plugins with schema generators - Browser DevToolsβ€” Application > Frames > Structured Data - β€” extract and inspect JSON-LD from a URL programmaticallycurl

+jq

1.2 Document Scope

Covers: schema formats, @id graph pattern, the major schema types every site needs, type-specific implementation per content type, validation methodology, sameAs networks, and common pitfalls. Touches but does not exhaust: Knowledge Graph claiming (own framework: framework-knowledgegraph.md

), AI citation mechanics (framework-aicitations.md

), Local SEO schema (framework-localseo.md

).

2. Client Variables Intake #

business_type: ""                      # local | ecommerce | publisher | b2b_service | sdvosb
primary_entity: ""                     # Organization name
person_entity: ""                      # Founder/author Person if relevant
website_domain: ""
local_business_subtype: ""             # Restaurant | Plumber | Dentist | etc. β€” only if local
ecommerce_product_count: 0
existing_schema_present: false
existing_schema_format: ""             # JSON-LD | Microdata | RDFa
existing_schema_validated: false
wikidata_qid_org: ""                   # if claimed
wikidata_qid_person: ""                # if claimed
sameas_targets: []                     # LinkedIn, GitHub, Wikidata, Wikipedia, etc.
known_schema_errors: []

3. Schema Format Decision #

Three formats are valid. Pick one and stick with it.

Format Recommendation Why
JSON-LD
Use this.
Decoupled from rendered HTML; survives template changes; preferred by Google; trivial to maintain.
Microdata Avoid for new builds Inline HTML attributes; brittle; tied to template structure.
RDFa Avoid for new builds Similar drawbacks to Microdata; less common.

JSON-LD lives in a <script type="application/ld+json">

block in the document head (or anywhere in the body β€” head is conventional). It does not need to mirror the visible HTML.

4. The @id Graph Pattern #

This is the single most important pattern in modern schema implementation. Older sites declared one schema block per type per page, with no cross-references. The graph pattern declares all entities in one @graph

block with cross-referenced @id

URIs, letting Google reconstruct the entity relationships.

4.1 Anatomy of a Graph

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": ["Organization", "ProfessionalService", "LocalBusiness"],
      "@id": "https://example.com/#organization",
      "name": "Example Co",
      "url": "https://example.com/",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q12345",
        "https://www.linkedin.com/company/example",
        "https://github.com/example"
      ],
      "founder": { "@id": "https://example.com/#founder" }
    },
    {
      "@type": "Person",
      "@id": "https://example.com/#founder",
      "name": "Joseph W. Anady",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139592630",
        "https://www.linkedin.com/in/josephanady"
      ],
      "worksFor": { "@id": "https://example.com/#organization" },
      "knowsAbout": ["Technical SEO", "AI search optimization"]
    },
    {
      "@type": "WebSite",
      "@id": "https://example.com/#website",
      "url": "https://example.com/",
      "name": "Example Co",
      "publisher": { "@id": "https://example.com/#organization" }
    },
    {
      "@type": "WebPage",
      "@id": "https://example.com/about/#webpage",
      "url": "https://example.com/about/",
      "name": "About β€” Example Co",
      "isPartOf": { "@id": "https://example.com/#website" },
      "about": { "@id": "https://example.com/#organization" }
    }
  ]
}
</script>

4.2 The @id Convention

@id

values are URIs. Use absolute URLs with a fragment identifier (#

) to disambiguate entities on the same page:

https://example.com/#organization

β€” the Organization entity - https://example.com/#website

β€” the WebSite entity - https://example.com/#founder

β€” the Person entity - https://example.com/about/#webpage

β€” the About page WebPage entity - https://example.com/blog/post-name/#article

β€” an Article entity

The @id

does NOT need to resolve to a real URL. It is just a unique identifier within the graph.

4.3 Cross-Page Consistency

Every page on the site declares the same Organization, WebSite, and Person entities (with the same @id

URIs). Page-specific entities (WebPage, Article, Service, Product) reference back via @id

:

{
  "@type": "Article",
  "@id": "https://example.com/blog/post/#article",
  "headline": "Post Title",
  "author": { "@id": "https://example.com/#founder" },
  "publisher": { "@id": "https://example.com/#organization" },
  "isPartOf": { "@id": "https://example.com/blog/post/#webpage" }
}

This cross-referencing is what gives Google's Knowledge Graph the connectivity it needs to attribute Articles to Authors, Authors to Organizations, and Organizations to Knowledge Panel entries.

5. The Foundation Schemas #

Every meaningful site needs these. Implement them sitewide before any page-specific schema.

5.1 Organization

Required for every site. If the business has a physical location, extend with LocalBusiness; if it serves a profession, extend with ProfessionalService.

{
  "@type": ["Organization", "ProfessionalService", "LocalBusiness"],
  "@id": "https://example.com/#organization",
  "name": "Example Co",
  "alternateName": ["example.com", "Example"],
  "url": "https://example.com/",
  "logo": {
    "@type": "ImageObject",
    "url": "https://example.com/logo.png",
    "width": 600,
    "height": 600
  },
  "image": "https://example.com/og-default.png",
  "description": "Plain-English description matching the site's actual purpose.",
  "telephone": "+1-505-512-3662",
  "email": "hello@example.com",
  "priceRange": "$597-$11997",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main St",
    "addressLocality": "Cassville",
    "addressRegion": "MO",
    "postalCode": "65625",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 36.6811,
    "longitude": -93.8702
  },
  "areaServed": [
    { "@type": "AdministrativeArea", "name": "Northwest Arkansas" },
    { "@type": "AdministrativeArea", "name": "Southwest Missouri" }
  ],
  "founder": { "@id": "https://example.com/#founder" },
  "foundingDate": "2017-01-01",
  "sameAs": [
    "https://www.wikidata.org/wiki/Q139592631",
    "https://www.linkedin.com/company/example",
    "https://github.com/example"
  ]
}

5.2 Person

For owner-operated businesses, sole-proprietor agencies, and any site with named editorial authors. Critical for E-E-A-T.

{
  "@type": "Person",
  "@id": "https://example.com/#founder",
  "name": "Joseph W. Anady",
  "givenName": "Joseph",
  "additionalName": "W.",
  "familyName": "Anady",
  "jobTitle": "Founder",
  "worksFor": { "@id": "https://example.com/#organization" },
  "image": "https://example.com/joseph.jpg",
  "url": "https://example.com/about/",
  "knowsAbout": [
    "Technical SEO", "Local SEO", "AI search optimization",
    "Schema markup", "SDVOSB digital marketing"
  ],
  "knowsLanguage": ["English"],
  "alumniOf": "U.S. Army",
  "sameAs": [
    "https://www.wikidata.org/wiki/Q139592630",
    "https://www.linkedin.com/in/josephanady",
    "https://github.com/josephanady"
  ]
}

Cross-reference: framework-eeat.md

for Person schema's role in expertise signals; framework-knowledgegraph.md

for sameAs network construction.

5.3 WebSite

Declares the site itself as an entity. Enables sitelinks search box.

{
  "@type": "WebSite",
  "@id": "https://example.com/#website",
  "url": "https://example.com/",
  "name": "Example Co",
  "publisher": { "@id": "https://example.com/#organization" },
  "inLanguage": "en-US",
  "potentialAction": {
    "@type": "SearchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "https://example.com/search?q={search_term_string}"
    },
    "query-input": "required name=search_term_string"
  }
}

5.4 WebPage (per-page)

Every page declares itself as a WebPage. Subtypes when applicable: AboutPage, ContactPage, FAQPage, CollectionPage.

{
  "@type": "WebPage",
  "@id": "https://example.com/about/#webpage",
  "url": "https://example.com/about/",
  "name": "About β€” Example Co",
  "description": "About page meta description.",
  "isPartOf": { "@id": "https://example.com/#website" },
  "about": { "@id": "https://example.com/#organization" },
  "primaryImageOfPage": {
    "@type": "ImageObject",
    "url": "https://example.com/about-hero.jpg"
  },
  "datePublished": "2026-01-15",
  "dateModified": "2026-05-05",
  "breadcrumb": { "@id": "https://example.com/about/#breadcrumb" }
}

5.5 BreadcrumbList

For every non-homepage. Drives breadcrumb display in SERPs.

{
  "@type": "BreadcrumbList",
  "@id": "https://example.com/about/#breadcrumb",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://example.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "About",
      "item": "https://example.com/about/"
    }
  ]
}

6. Per-Content-Type Schemas #

6.1 Article (blog post, news story, editorial)

Use Article

, NewsArticle

, BlogPosting

, or TechArticle

depending on content. Article

is the safe default.

{
  "@type": "Article",
  "@id": "https://example.com/blog/post-slug/#article",
  "headline": "Post headline (under 110 characters)",
  "description": "Meta description.",
  "image": [
    "https://example.com/post-image-1x1.jpg",
    "https://example.com/post-image-4x3.jpg",
    "https://example.com/post-image-16x9.jpg"
  ],
  "author": { "@id": "https://example.com/#founder" },
  "publisher": { "@id": "https://example.com/#organization" },
  "datePublished": "2026-04-15T10:00:00-05:00",
  "dateModified": "2026-05-05T14:30:00-05:00",
  "mainEntityOfPage": { "@id": "https://example.com/blog/post-slug/#webpage" },
  "wordCount": 2500,
  "articleBody": "First 200 characters of body, optional but improves AI extraction.",
  "keywords": ["technical seo", "schema", "json-ld"]
}

Image best practice: provide three images at three aspect ratios (1x1, 4x3, 16x9). Google selects the best fit per surface.

6.2 Service

For service-based businesses describing what they offer.

{
  "@type": "Service",
  "@id": "https://example.com/services/local-seo/#service",
  "name": "Local SEO for Northwest Arkansas",
  "description": "Description of the service offered.",
  "provider": { "@id": "https://example.com/#organization" },
  "serviceType": "Local SEO",
  "areaServed": [
    { "@type": "AdministrativeArea", "name": "Northwest Arkansas" }
  ],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Local SEO Services",
    "itemListElement": [
      {
        "@type": "Offer",
        "itemOffered": {
          "@type": "Service",
          "name": "Google Business Profile setup"
        },
        "price": "597",
        "priceCurrency": "USD"
      }
    ]
  }
}

6.3 Product (ecommerce)

Cross-reference: framework-ecommerceseo.md

for full product schema depth.

{
  "@type": "Product",
  "@id": "https://example.com/products/sku-123/#product",
  "name": "Product Name",
  "description": "Product description.",
  "image": ["https://example.com/product.jpg"],
  "sku": "SKU-123",
  "gtin13": "1234567890123",
  "brand": { "@type": "Brand", "name": "Brand Name" },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/sku-123/",
    "priceCurrency": "USD",
    "price": "29.99",
    "priceValidUntil": "2026-12-31",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "shippingDetails": { "@type": "OfferShippingDetails" },
    "hasMerchantReturnPolicy": { "@type": "MerchantReturnPolicy" }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "127"
  }
}

aggregateRating

is only valid if you actually have those reviews on-site. Fabricating reviews is a manual-action violation. Cross-reference: framework-spampolicies.md

.

6.4 LocalBusiness (with subtype)

For local businesses, use the most specific subtype available. Schema.org has hundreds: Restaurant

, Plumber

, Dentist

, HVACBusiness

, RealEstateAgent

, LegalService

, MedicalBusiness

, HomeAndConstructionBusiness

, etc.

{
  "@type": ["LocalBusiness", "Plumber"],
  "@id": "https://example.com/#organization",
  "name": "Example Plumbing",
  "telephone": "+1-555-555-5555",
  "address": { "@type": "PostalAddress", "..." : "..." },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "17:00"
    }
  ],
  "priceRange": "$$"
}

Cross-reference: framework-localseo.md

for full LocalBusiness depth.

6.5 FAQPage

Only when the page actually answers questions. Misuse triggers manual actions.

{
  "@type": "FAQPage",
  "@id": "https://example.com/faq/#faqpage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How long does local SEO take to show results?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Most clients see Local Pack improvements within 30-60 days..."
      }
    }
  ]
}

FAQ rich results were largely deprecated by Google in 2023 for non-government / non-health sites, but the schema still feeds AI extraction. Keep using it where it accurately describes the page; do not expect rich results.

6.6 HowTo

For genuine step-by-step instructions. Like FAQ, rich results were curtailed in 2023 but the schema remains useful for AI extraction.

{
  "@type": "HowTo",
  "name": "How to claim a Google Business Profile",
  "step": [
    {
      "@type": "HowToStep",
      "name": "Sign in to Google Business Profile",
      "text": "Visit business.google.com and sign in..."
    }
  ]
}

6.7 Event

For dated events.

{
  "@type": "Event",
  "name": "Workshop on Local SEO",
  "startDate": "2026-06-15T18:00:00-05:00",
  "endDate": "2026-06-15T20:00:00-05:00",
  "location": {
    "@type": "Place",
    "name": "Cassville Chamber",
    "address": { "@type": "PostalAddress", "..." : "..." }
  },
  "organizer": { "@id": "https://example.com/#organization" },
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode"
}

6.8 Review (single review)

When a page is genuinely a single review of one product/service.

{
  "@type": "Review",
  "itemReviewed": { "@type": "Product", "name": "Product Name" },
  "author": { "@id": "https://example.com/#founder" },
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": "4.5",
    "bestRating": "5"
  },
  "datePublished": "2026-04-01"
}

6.9 VideoObject

For pages embedding or hosting video. Required for video sitemap inclusion.

{
  "@type": "VideoObject",
  "name": "Video Title",
  "description": "Video description.",
  "thumbnailUrl": ["https://example.com/thumb.jpg"],
  "uploadDate": "2026-04-01T08:00:00-05:00",
  "duration": "PT5M30S",
  "contentUrl": "https://example.com/video.mp4",
  "embedUrl": "https://www.youtube.com/embed/abc123"
}

Cross-reference: framework-videoseo.md

for full video implementation.

6.10 Other Useful Types

Course

β€” for educational content - Recipe

β€” for food sites - JobPosting

β€” for hiring pages - RealEstateListing

β€” for property listings - MedicalCondition

/Drug

β€” for YMYL medical content (high standard required) - SoftwareApplication

β€” for tools/apps - DataCatalog

/Dataset

β€” for structured data publishers - ItemList

β€” for lists of any kind

7. The sameAs Network #

sameAs

declares external canonical identifiers for an entity. This is how Google's Knowledge Graph builds entity confidence.

7.1 sameAs Hierarchy of Trust

Source Weight Notes
Wikidata Highest Entity ID format: https://www.wikidata.org/wiki/Q12345
Wikipedia Very high Article URL
Crunchbase (orgs) High Verified company entries
LinkedIn (orgs and persons) High Verified accounts
GitHub (devs/orgs) High when relevant
Twitter/X Medium Verified accounts only
Medium Page (not personal)
Medium Business profiles
YouTube Medium Channel URL
Personal website Low (when used as sameAs from another entity)
Random social network Low Avoid noise

Cross-reference: framework-knowledgegraph.md

for Wikidata claiming methodology.

7.2 sameAs Hygiene

  • Only declare sameAs for entities you actually own and control.
  • Verify each sameAs target resolves and represents the same entity.
  • Do not include URL shorteners or redirects in sameAs.
  • Update sameAs when external profiles move.
  • Both directions matter: the external profile should also link back to the canonical site.

8. Schema Implementation Patterns #

8.1 The Sitewide Block

Every page on the site emits the same Organization, WebSite, and Person entities. Implement once in your template head:

<!-- Sitewide schema graph (every page) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    { /* Organization */ },
    { /* Person */ },
    { /* WebSite */ }
  ]
}
</script>

8.2 The Page-Specific Block

Each page adds its specific entities (WebPage, Article, BreadcrumbList, etc.) referencing the sitewide entities via @id

. Two valid patterns:

Pattern A: Two separate script tags

  • Sitewide block in template head
  • Page-specific block in template body or a content-type-specific include

Pattern B: Merged graph

  • Single script tag combining sitewide + page-specific entities
  • Cleaner output; more complex template logic

Pattern A is easier to maintain. Pattern B is what Yoast / Rank Math output.

8.3 Dynamic Sites

For React, Next.js, Astro, Hugo, etc., the schema is built from data at render time. Maintain a single schema.ts

(or equivalent) module that exports typed builders:

export function organizationSchema(): Organization { /* ... */ }
export function articleSchema(post: Post): Article { /* ... */ }
export function pageSchema(page: Page): WebPage { /* ... */ }

Tests assert the output validates. Cross-reference: framework-nextjs.md

, framework-astrohugo.md

.

8.4 WordPress Sites

Yoast and Rank Math both output JSON-LD using the @id graph pattern. Verify their output rather than rebuilding. Common gotchas:

  • Yoast and Rank Math both running β†’ duplicate schema. Pick one.
  • Theme adding schema in addition to the plugin β†’ duplicate or conflicting. Strip theme schema.
  • Plugin defaults inadequate (e.g., missing Person schema for the site owner) β†’ use plugin's customization hooks.

9. Validation Methodology #

9.1 Per-URL Validation

Three tools to run on every important page:

Google Rich Results Testβ€” confirms Google can parse and what rich results are eligible. - Schema.org Validatorβ€” confirms strict schema.org compliance (catches issues Google's tool doesn't). - Yandex Microdata Validatorβ€” third opinion; sometimes catches edge cases.

A page that passes all three is in good shape.

9.2 Sitewide Validation

For sites with many URLs, sample-test rather than per-URL:

  • Pick one URL per content type (homepage, About, blog post, service page, product page if ecommerce, etc.)
  • Run the three validators on each
  • Crawl the site with Screaming Frog β€” Custom Extraction can pull JSON-LD blocks from every URL
  • Programmatically parse and validate (custom script + schema.org's Java validator or a Node lib like structured-data-testing-tool

)

9.3 GSC Enhancements Monitoring

Google Search Console's Enhancements section reports schema-related issues sitewide. Categories include Articles, Products, FAQs, How-tos, Breadcrumbs, Sitelinks searchbox, Logos, etc. Check monthly. New errors usually indicate a template change broke schema for a content type.

In 2026, AI search engines (ChatGPT, Perplexity, Claude, Gemini, Copilot) use schema as a primary signal for entity extraction. Practical implications:

10.1 Make Claims Extractable

AI engines parse schema looking for atomic facts: "Joseph W. Anady is the founder of That Stupid Computer," "That Stupid Computer is a SDVOSB business in Cassville, Missouri." Express these as schema:

founder

relationship between Person and Organization - address.addressLocality

for the city - award

,honorificPrefix

, certifications declared on Person - description

written as plain prose, not marketing copy

10.2 Don't Hide Facts in Prose Only

A page can have a clear fact in body text ("we serve all of Northwest Arkansas") but if it isn't also in the schema (areaServed

), AI engines may miss it.

10.3 Use Specific Subtypes

Organization

is too generic. LocalBusiness

is better. Plumber

(a LocalBusiness subtype) is best because it matches a query category. AI search engines weight specificity.

10.4 The answer-capsule Pattern

Pair schema with a 200-300 word "answer capsule" paragraph in the visible page content that AI extractors can copy verbatim. The schema gives them entity confidence; the prose gives them the quote. Cross-reference: framework-aicitations.md

.

11. Audit Mode #

# Criterion Pass/Fail
SC1 Format is JSON-LD (not Microdata or RDFa)
SC2 Sitewide Organization schema present on every page
SC3 Sitewide WebSite schema present on every page
SC4 Person schema for owner/key author present and referenced from Organization
SC5 Per-page WebPage schema present, references WebSite via

@idgraph pattern used (entities cross-reference via@id, not duplicated)@idvalues are absolute URLs with fragment identifierhCard

, hReview

, etc.)Score: 30. World-class: 28+/30.

12. Common Mistakes #

Microdata or RDFa instead of JSON-LD. Maintainability nightmare. - One schema per page, no Misses the cross-referencing benefit.@graph. - No Person schema. Erases E-E-A-T author signals. - Generic LocalBusiness.Plumber

orDentist

is far stronger thanLocalBusiness

. - Fabricated aggregateRating. Manual-action territory. - FAQ schema on pages that aren't FAQs. Same. - Schema added by client-side JavaScript. Some crawlers see it; many don't. - Duplicate schema from multiple plugins. Yoast + Rank Math + theme = three Organization blocks. Conflicting signals. - Use absolute URLs with@id

values that aren't URIs.#

fragments. - Image fields pointing to broken assets. Schema validates but rich results don't show. - datePublished after dateModified. Logical impossibility, occasionally happens. - sameAs targets that don't resolve. Dead links erode signal. - Schema on staging visible to crawlers. Robots-blocked staging still gets indexed sometimes; schema there pollutes the entity graph. - Schema not updated when content changes. StalewordCount

, staledateModified

, staledescription

. - Skipping BreadcrumbList. Trivial to implement, immediate SERP benefit. - Over-decorating schema with marketing language."Best plumber in Cassville" indescription

instead of plain prose. AI extractors discount marketing phrases.

13. Maintenance #

Weekly:

  • Spot-check newly published content for correct schema
  • Monitor GSC Enhancements for new errors

Monthly:

  • Sitewide validation sample (5 representative URLs through Rich Results Test)
  • Review GSC Enhancements report
  • Verify sameAs targets still resolve

Quarterly:

  • Comprehensive schema audit (every content type sampled)
  • Validate Wikidata Q-IDs still claimed
  • Refresh any schema fields that depend on counted data (review counts, post counts, etc.)
  • Review new Schema.org types released; adopt where applicable

Annually:

  • Full sitewide JSON-LD extraction and programmatic validation
  • Review schema strategy against new SERP features and AI search developments
  • Verify schema authoring tools (plugins, modules) are up to date

14. Companion Documents #

framework-knowledgegraph.md

β€” Wikidata claiming, Knowledge Panel, sameAs network construction - framework-eeat.md

β€” Person schema's role in E-E-A-T signals - framework-localseo.md

β€” LocalBusiness subtype selection and full local schema depth - framework-aicitations.md

β€” Schema's role in AI search citation - framework-ecommerceseo.md

β€” Product schema, MerchantReturnPolicy, OfferShippingDetails - framework-videoseo.md

β€” VideoObject and video sitemap - framework-spampolicies.md

β€” Schema spam policies (fabricated reviews, FAQ misuse) - framework-internallinking.md

β€” BreadcrumbList placement strategy - framework-technicalseo.md

β€” Schema's place in the indexing pipeline

Document version: 1.0

Last updated: 2026-05-05

Owner: Joseph W. Anady β€” ThatDeveloperGuy β€” SDVOSB

About this framework library #

This article is the Dev.to republish of a framework reference document from ThatDevPro's SEO + AI engineering library. Canonical source: https://www.thatdevpro.com/insights/framework-schema/

ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio operating from Cassville, Missouri. The studio runs the full 14-tier Engine Optimization stack and ships open-source tooling for AI citation engineering.

Companion 14-tier Engine Optimization stack (each tier is its own article):

Tier 1 β€” FoundationTier 2 β€” Search VisibilityTier 3 β€” AI DominationTier 4 β€” Entity and AuthorityTier 5 β€” Local DominationTier 6 β€” Content and MultimediaTier 7 β€” Social and CommunityTier 8 β€” Data, Analytics, ConversionTier 9 β€” Monitoring and IntelligenceTier 10 β€” Workflow and OperationsTier 11 β€” Marketplace and RetailTier 12 β€” InternationalTier 14 β€” Advanced and Immersive

Need this framework implemented on your site? See the Engine Optimization service or hire through ThatDevPro contact.

── more in #developer-tools 4 stories Β· sorted by recency
── more on @google 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/schema-org-json-ld-t…] indexed:0 read:18min 2026-05-24 Β· β€”