{"id":7398,"date":"2026-08-09T09:00:00","date_gmt":"2026-08-09T07:00:00","guid":{"rendered":"https:\/\/taismo.de\/?p=7398"},"modified":"2026-07-27T00:47:29","modified_gmt":"2026-07-26T22:47:29","slug":"schema-markup","status":"publish","type":"post","link":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/","title":{"rendered":"Schema Markup in Practice: Which Types to Use and How to Ship Them"},"content":{"rendered":"<style>\n.taismo-art{display:grid;grid-template-columns:320px minmax(0,1fr);gap:36px;align-items:start}\n.taismo-art .toc-sticky{position:sticky;top:80px}\n.taismo-art .toc-sticky ol li{margin-bottom:9px}\n.taismo-art .toc-sticky ol a:hover{color:var(--toc-hover) !important}\n.taismo-art .taismo-main h2{scroll-margin-top:90px;margin-top:38px}\n.taismo-art .lead-def{font-size:1.15em;line-height:1.6;background:#f7f2ec;border-left:4px solid #ED8924;padding:16px 20px;border-radius:8px}\n.taismo-art table{border-collapse:collapse;width:100%;margin:18px 0}\n.taismo-art th,.taismo-art td{border:1px solid #d9e0df;padding:9px 12px;text-align:left;font-size:0.95em}\n.taismo-art th{background:#072328;color:#fff}\n.taismo-art figure{margin:26px 0}\n.taismo-art figcaption{font-size:0.9em;color:#55605f;margin-top:8px}\n.taismo-art pre{background:#072328;color:#f5f5f5;padding:16px 18px;border-radius:10px;overflow-x:auto;font-size:0.86em;line-height:1.5}\n@media(max-width:900px){.taismo-art{grid-template-columns:1fr}.taismo-art .toc-sticky{position:static}}\n<\/style>\n<div class=\"taismo-art\">\n<aside class=\"toc-sticky\" style=\"--toc-hover:#072328;background:#ED8924;border-radius:14px;padding:22px 24px\">\n<div style=\"text-align:center;margin-bottom:14px\"><svg fill=\"#ffffff\" role=\"img\" aria-label=\"taismo SEO Magazine\" style=\"width:210px;max-width:80%;height:auto;display:inline-block\" id=\"Ebene_1\" data-name=\"Ebene 1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 209.04 52.32\"> <g id=\"Gruppe_796\" data-name=\"Gruppe 796\"> <path id=\"Pfad_1293\" data-name=\"Pfad 1293\" d=\"M6.17,17.93h-3.28v-6.05h3.37v-6.3h7.41v6.3h5.24v6.05h-5.14v8.27c-.07.97.12,1.94.55,2.8.37.55,1.14.83,2.31.83.5,0,.93,0,1.28-.03.38-.02.76-.06,1.13-.12v5.85c-.69.18-1.4.29-2.12.33-.94.08-1.8.12-2.57.12-1.3.04-2.59-.16-3.83-.55-.99-.33-1.86-.93-2.54-1.71-.7-.88-1.19-1.9-1.42-3-.31-1.43-.45-2.89-.42-4.36v-8.42h.02Z\"\/> <path id=\"Pfad_1294\" data-name=\"Pfad 1294\" d=\"M40.74,35.57h-6.51l-.41-1.82c-.63.66-1.36,1.24-2.17,1.66-.88.42-1.85.64-2.83.61-.91,0-1.83-.09-2.72-.3-.85-.19-1.64-.58-2.31-1.13-.71-.61-1.26-1.37-1.61-2.24-.44-1.18-.65-2.42-.61-3.68v-1.31c-.04-1.08.18-2.15.65-3.12.41-.8,1-1.5,1.74-2.02.76-.52,1.6-.88,2.5-1.09.98-.22,1.97-.33,2.98-.33.8,0,1.59.06,2.37.2.66.13,1.3.33,1.92.61v-.86c0-.5-.06-.99-.2-1.47-.15-.44-.42-.84-.8-1.11-.51-.35-1.09-.58-1.69-.71-.92-.18-1.85-.27-2.8-.26-.84,0-1.67.08-2.5.23-.89.15-1.66.29-2.3.42v-5.64c.44-.12.88-.2,1.34-.26.53-.06,1.07-.13,1.64-.2.57-.06,1.12-.12,1.64-.15.53-.04.96-.05,1.34-.05,1.94-.05,3.85.18,5.72.65,1.29.34,2.48,1,3.45,1.92.85.87,1.45,1.96,1.71,3.15.31,1.42.47,2.86.45,4.31v13.96h0,0ZM30.86,30.89c1.5.11,2.8-1.01,2.91-2.51v-2.38c-.71-.53-1.59-.8-2.47-.76-.78-.04-1.56.15-2.24.53-.55.35-.83,1.07-.83,2.15v.35c-.06.72.15,1.43.61,1.99.55.47,1.28.7,2.02.64\"\/> <rect id=\"Rechteck_760\" data-name=\"Rechteck 760\" x=\"45.38\" y=\"11.88\" width=\"7.61\" height=\"23.7\"\/> <path d=\"M120.87,23.5v-.39c-.06-1.47.11-2.96.48-4.39.32-1.01,1.13-1.51,2.44-1.51.54-.03,1.07.1,1.53.38.4.27.69.67.83,1.13.18.61.29,1.24.33,1.86.05.75.07,1.59.07,2.53v.39h7.72v-.93c.04-1.77-.21-3.53-.76-5.22-.44-1.32-1.17-2.52-2.15-3.5-.94-.91-2.09-1.59-3.36-1.96-1.41-.41-2.88-.62-4.34-.61-1.45,0-2.88.18-4.26.61-1.25.38-2.4,1.05-3.33,1.96-.98.99-1.71,2.18-2.17,3.5-.56,1.68-.82,3.45-.78,5.22v.93h7.72Z\"\/> <path d=\"M85.51,23.5v-2.19c-.06-.81.15-1.62.58-2.31.36-.53.96-.82,1.59-.8.24,0,.47.03.71.07.24.06.47.18.65.35.23.22.4.5.48.8.14.47.19.95.18,1.44v2.65h7.56v-2.49c-.05-.74.15-1.47.55-2.09.37-.48.95-.76,1.56-.73.5,0,.99.16,1.39.45.41.3.64,1.04.64,2.22v2.64h7.56v-4.6c.03-1.22-.16-2.43-.55-3.59-.31-.88-.83-1.69-1.51-2.34-.64-.58-1.39-1.02-2.22-1.28-.85-.28-1.73-.41-2.62-.41-1.07-.02-2.12.19-3.1.64-1,.51-1.91,1.2-2.65,2.05-.53-.88-1.27-1.59-2.17-2.06-1.07-.45-2.22-.66-3.37-.61-1.09-.04-2.17.2-3.12.7-.91.53-1.73,1.21-2.42,2.02l-.5-2.12h-6.77v11.62h7.56v-.03Z\"\/> <path d=\"M67.27,26.57c0-1.7,1.37-3.07,3.07-3.07h2.01c-.8-.78-1.79-1.35-2.88-1.66l-1.61-.55c-.67-.23-1.24-.42-1.71-.58-.4-.12-.78-.28-1.16-.45-.26-.12-.48-.3-.65-.53-.15-.26-.22-.55-.2-.86,0-.2.04-.41.12-.61.12-.23.31-.42.55-.53.4-.18.82-.31,1.25-.38.75-.12,1.49-.17,2.24-.15.85,0,1.71.06,2.54.2.76.1,1.5.26,2.24.45v-5.64c-.44-.12-.88-.2-1.34-.26-.52-.06-1.07-.13-1.64-.2-.56-.06-1.12-.12-1.64-.15s-.97-.05-1.34-.05c-3.43,0-6,.69-7.71,2.09-1.64,1.24-2.6,3.21-2.57,5.26-.03.99.1,1.96.38,2.9.22.7.59,1.35,1.09,1.89.48.52,1.06.93,1.69,1.24.73.35,1.47.66,2.24.93l1.16.41c.77.26,1.5.56,2.22.93.43.26.69.74.65,1.24.06.66-.32,1.29-.96,1.51-1.13.29-2.31.41-3.47.35-.88,0-1.75-.08-2.62-.23-.98-.15-1.78-.29-2.42-.42v5.64c.46.12.92.2,1.39.26.55.06,1.13.13,1.74.2.61.06,1.2.12,1.77.15.57.03,1.04.05,1.41.05,1.38.03,2.77-.09,4.14-.33v-9.06h.03Z\"\/> <\/g> <g> <path d=\"M71.17,44.23v-16.63h4.21l4.42,6.56,4.44-6.56h4.21v16.63h-3.83v-10.69l-4.8,7.03-4.82-7.03v10.69h-3.83Z\"\/> <path d=\"M90.25,44.23l6.46-16.63h4.09l6.46,16.63h-4.04l-1.21-3.16h-6.51l-1.21,3.16h-4.04ZM96.74,37.69h4.02l-2-5.32-2.02,5.32Z\"\/> <path d=\"M115.84,44.51c-1.71,0-3.22-.37-4.53-1.1-1.31-.74-2.33-1.75-3.08-3.04-.74-1.29-1.12-2.78-1.12-4.46s.37-3.16,1.12-4.46c.75-1.29,1.77-2.3,3.08-3.04s2.82-1.11,4.53-1.11c1.06,0,2.02.16,2.89.46.86.31,1.62.73,2.27,1.27s1.19,1.16,1.62,1.85l-3.16,1.9c-.24-.38-.55-.72-.94-1.02-.39-.3-.81-.54-1.27-.7-.46-.17-.93-.25-1.4-.25-.93,0-1.76.21-2.48.64-.72.43-1.29,1.03-1.7,1.79-.41.77-.62,1.65-.62,2.65s.2,1.88.59,2.65c.4.77.97,1.38,1.71,1.82.75.44,1.61.67,2.59.67.68,0,1.3-.13,1.85-.38.55-.25,1-.6,1.33-1.04.33-.44.53-.97.59-1.57h-3.75v-2.95h7.44v2.26c-.03,1.55-.38,2.86-1.04,3.93-.67,1.07-1.56,1.87-2.67,2.41-1.12.54-2.4.81-3.84.81Z\"\/> <path d=\"M123.3,44.23l6.46-16.63h4.09l6.46,16.63h-4.04l-1.21-3.16h-6.51l-1.21,3.16h-4.04ZM129.79,37.69h4.02l-2-5.32-2.02,5.32Z\"\/> <path d=\"M141.31,44.23v-3.61l8.34-9.41h-8.27v-3.61h13.23v3.61l-8.34,9.41h8.27v3.61h-13.23Z\"\/> <path d=\"M157.04,44.23v-16.63h3.83v16.63h-3.83Z\"\/> <path d=\"M164.1,44.23v-16.63h4.02l7.29,10.15v-10.15h3.83v16.63h-3.83l-7.48-10.43v10.43h-3.83Z\"\/> <\/g> <path d=\"M205.77,18.4h-4.03c-.44-2.75-2.83-4.86-5.7-4.86-.5,0-.91.41-.91.91v3.95h-10.76c-.5,0-.91.41-.91.91v24.31c0,.5.41.91.91.91h21.4c.5,0,.91-.41.91-.91v-24.31c0-.5-.41-.91-.91-.91ZM189.24,23.26h5.9v1.82h-5.9c-.5,0-.91-.41-.91-.91s.41-.91.91-.91ZM199.89,39.66h-10.66c-.5,0-.91-.41-.91-.91v-9.73c0-.5.41-.91.91-.91h5.9v5.77c0,.5.41.91.91.91,2.18,0,3.95,1.77,3.95,3.96,0,.31-.04.62-.11.91ZM200,34.56c-.82-.78-1.88-1.32-3.05-1.5v-13.74s0,0,0,0,0,0,0,0v-3.84c1.74.41,3.05,1.98,3.05,3.85v15.25ZM204.86,42.71h-4.62c.97-1.03,1.57-2.43,1.57-3.95v-18.54h3.05v22.5Z\"\/> <\/svg><\/div>\n<h3 style=\"text-align:center;color:#fff;margin:0 0 14px;font-size:1.1em\">Contents<\/h3>\n<ol style=\"margin:0;padding-left:1.2em;line-height:1.5;font-weight:600;color:#fff;font-size:0.9em\">\n<li><a href=\"#what-schema-markup-changes\" style=\"color:#fff;text-decoration:none\">What schema markup changes<\/a><\/li>\n<li><a href=\"#pick-the-type\" style=\"color:#fff;text-decoration:none\">Pick the type before you write code<\/a><\/li>\n<li><a href=\"#identity-layer\" style=\"color:#fff;text-decoration:none\">Organization and Person: The layer you build once<\/a><\/li>\n<li><a href=\"#page-layer\" style=\"color:#fff;text-decoration:none\">Article, Product and FAQPage<\/a><\/li>\n<li><a href=\"#specialist-types\" style=\"color:#fff;text-decoration:none\">LocalBusiness, Event and JobPosting<\/a><\/li>\n<li><a href=\"#required-fields\" style=\"color:#fff;text-decoration:none\">Required fields versus recommended fields<\/a><\/li>\n<li><a href=\"#retired-features\" style=\"color:#fff;text-decoration:none\">FAQ and HowTo: The types that stopped paying out<\/a><\/li>\n<li><a href=\"#id-graph\" style=\"color:#fff;text-decoration:none\">One graph instead of twelve snippets<\/a><\/li>\n<li><a href=\"#formats\" style=\"color:#fff;text-decoration:none\">JSON-LD, Microdata and RDFa<\/a><\/li>\n<li><a href=\"#where-the-code-goes\" style=\"color:#fff;text-decoration:none\">Where the JSON-LD actually goes<\/a><\/li>\n<li><a href=\"#cms\" style=\"color:#fff;text-decoration:none\">WordPress, Shopify and the plugin problem<\/a><\/li>\n<li><a href=\"#worked-example\" style=\"color:#fff;text-decoration:none\">A worked example: One post, four nodes<\/a><\/li>\n<li><a href=\"#testing\" style=\"color:#fff;text-decoration:none\">Test it before Google does<\/a><\/li>\n<li><a href=\"#errors\" style=\"color:#fff;text-decoration:none\">What the error messages actually mean<\/a><\/li>\n<li><a href=\"#mistakes\" style=\"color:#fff;text-decoration:none\">Seven mistakes that break schema markup<\/a><\/li>\n<li><a href=\"#ai-visibility\" style=\"color:#fff;text-decoration:none\">What schema markup does for AI answers<\/a><\/li>\n<li><a href=\"#rankings\" style=\"color:#fff;text-decoration:none\">Does schema markup improve rankings?<\/a><\/li>\n<li><a href=\"#rollout\" style=\"color:#fff;text-decoration:none\">Your rollout in five steps<\/a><\/li>\n<li><a href=\"#faq\" style=\"color:#fff;text-decoration:none\">Schema markup FAQ<\/a><\/li>\n<li><a href=\"#sources\" style=\"color:#fff;text-decoration:none\">Sources<\/a><\/li>\n<\/ol>\n<p><a href=\"https:\/\/www.google.com\/preferences\/source?q=https:\/\/taismo.de\" title=\"Set taismo as a preferred source on Google\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display:block;text-align:center;margin-top:16px;background:#072328;color:#fff;font-size:0.82em;font-weight:700;padding:9px 12px;border-radius:8px;text-decoration:none\">&#9734; Prefer taismo on Google<\/a><\/aside>\n<div class=\"taismo-main\">\n<h1 class=\"brand-claim\" style=\"color:#072328\">Schema Markup in Practice: Which Types to Use and How to Ship Them<\/h1>\n<figure style=\"margin:0 0 26px\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/taismo.de\/wp-content\/uploads\/2026\/07\/schema-org-json-ld.webp\" alt=\"Schema markup in practice: choosing schema types, building a JSON-LD graph and testing it\" width=\"1280\" height=\"720\" loading=\"eager\" style=\"width:100%;height:auto;border-radius:14px;display:block\"><\/figure>\n<div class=\"taismo-author-top\" style=\"display:flex;flex-wrap:wrap;gap:16px;align-items:center;background:#e6e6e6;border-radius:12px;padding:16px 20px;margin:0 0 24px\"><img decoding=\"async\" src=\"https:\/\/taismo.de\/wp-content\/uploads\/2025\/11\/Kostenloses-S-3.png\" alt=\"Dominik Breitbach, founder of taismo\" width=\"64\" height=\"64\" loading=\"lazy\" style=\"width:64px;height:64px;border-radius:50%;object-fit:cover;border:2px solid #ED8924;flex:0 0 auto\"><\/p>\n<div style=\"flex:1 1 260px;min-width:220px\">\n<div style=\"font-weight:800;color:#072328\">Dominik Breitbach <span style=\"font-weight:500;color:#4a5755\">&#183; Founder and Lead SEO Strategist<\/span><\/div>\n<p style=\"margin:3px 0 0;font-size:0.92em;line-height:1.5;color:#072328\">Dominik Breitbach founded taismo GmbH, an SEO and GEO agency from Munich. Structured data is the part of the job he does every week: Entity graphs in JSON-LD, rich results, and visibility inside AI answers.<\/p>\n<\/div>\n<div style=\"display:flex;flex-wrap:wrap;gap:8px;flex:1 1 100%\"><span style=\"background:#072328;color:#fff;font-size:0.8em;font-weight:700;padding:5px 12px;border-radius:999px\">&#9201; Reading time: 21 min<\/span><span style=\"background:#072328;color:#fff;font-size:0.8em;font-weight:700;padding:5px 12px;border-radius:999px\">&#128260; Last updated: 9 August 2026<\/span><\/div>\n<\/div>\n<p class=\"lead-def\">Schema markup is the schema.org vocabulary written into a page as JSON-LD so machines can read what the page is about. It does two jobs: It makes a page eligible for rich results in Google, and it hands AI systems an unambiguous entity to cite. Most implementations fail earlier than that, because the markup describes the wrong thing, contradicts itself across templates, or never gets tested after a relaunch. This guide covers the three decisions that carry the outcome: Which type per page, how to connect the types into one graph, and how to test what you shipped.<\/p>\n<p class=\"taismo-cta-text\" style=\"border-left:3px solid #ED8924;padding:4px 0 4px 14px;margin:6px 0 22px;color:#072328\">&#128073; Not sure what your current markup reports to Google? A <a href=\"https:\/\/taismo.de\/en\/seo-audit\/\">schema audit<\/a> reads every block on every template and names the contradictions.<\/p>\n<h2 id=\"what-schema-markup-changes\">What schema markup changes<\/h2>\n<p>Schema markup adds a machine readable claim to a page. A visitor sees nothing change. A crawler stops guessing from prose and gets told: This is a product, it costs 49 euros, it is in stock, and the company behind it is this legal entity at this address. That claim buys you three things, and only three:<\/p>\n<ol>\n<li><strong>Eligibility for <a href=\"https:\/\/taismo.de\/en\/what-is\/rich-snippets\/\">rich snippets<\/a>:<\/strong> Stars, prices, breadcrumbs, event dates and job listings appear only where valid markup supports them.<\/li>\n<li><strong>Entity clarity:<\/strong> Google and AI systems can tie the page to a known company, author and topic instead of inferring them.<\/li>\n<li><strong>Consistency across a domain:<\/strong> One definition of your company, referenced everywhere, cannot contradict itself.<\/li>\n<\/ol>\n<p>It buys you no ranking position. Google has stated repeatedly that structured data is not a ranking factor. What it changes is what happens after the ranking, which is a different lever and often the cheaper one.<\/p>\n<p>If you need the vocabulary explained first, our glossary covers <a href=\"https:\/\/taismo.de\/en\/what-is\/structured-data\/\">structured data<\/a>, the <a href=\"https:\/\/taismo.de\/en\/what-is\/json-ld\/\">JSON-LD<\/a> format and <a href=\"https:\/\/taismo.de\/en\/what-is\/rich-snippets\/\">rich snippets<\/a> as terms. This guide starts where those definitions end: At the work of building the markup and keeping it correct.<\/p>\n<h2 id=\"pick-the-type\">Pick the type before you write code<\/h2>\n<p>schema.org publishes more than 800 types. Most websites need between four and eight of them, and the decision that wastes the most time in practice is which type belongs on which template.<\/p>\n<p>The rule that settles it: One primary type per page, chosen from what the page visibly is, plus the global entities referenced by <code>@id<\/code>. A service page is a <code>Service<\/code>, a blog post is a <code>BlogPosting<\/code>, a location page is a <code>LocalBusiness<\/code>.<\/p>\n<figure><a href=\"https:\/\/taismo.de\/en\/seo-audit\/\" title=\"SEO audit from taismo: every template checked for the right schema type\"><svg viewBox=\"0 0 720 430\" role=\"img\" aria-label=\"Which schema type belongs on which page type\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:100%;height:auto\"><title>Page type to schema type<\/title><rect width=\"720\" height=\"430\" fill=\"#f6f8f8\" rx=\"10\"\/><g font-family=\"Arial,sans-serif\"><text x=\"360\" y=\"36\" text-anchor=\"middle\" font-size=\"19\" font-weight=\"800\" fill=\"#072328\">One page, one primary type<\/text><text x=\"150\" y=\"66\" text-anchor=\"middle\" font-size=\"12\" font-weight=\"700\" fill=\"#55605f\">PAGE TYPE<\/text><text x=\"530\" y=\"66\" text-anchor=\"middle\" font-size=\"12\" font-weight=\"700\" fill=\"#55605f\">PRIMARY SCHEMA TYPE<\/text><rect x=\"40\" y=\"78\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#072328\"\/><text x=\"150\" y=\"100\" text-anchor=\"middle\" font-size=\"13\" fill=\"#ffffff\">Home page<\/text><rect x=\"420\" y=\"78\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#ED8924\"\/><text x=\"530\" y=\"100\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">Organization + WebSite<\/text><path d=\"M266 95 H414\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M408 90 L418 95 L408 100 Z\" fill=\"#9aa8a6\"\/><rect x=\"40\" y=\"122\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#072328\"\/><text x=\"150\" y=\"144\" text-anchor=\"middle\" font-size=\"13\" fill=\"#ffffff\">Service page<\/text><rect x=\"420\" y=\"122\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#ED8924\"\/><text x=\"530\" y=\"144\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">Service<\/text><path d=\"M266 139 H414\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M408 134 L418 139 L408 144 Z\" fill=\"#9aa8a6\"\/><rect x=\"40\" y=\"166\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#072328\"\/><text x=\"150\" y=\"188\" text-anchor=\"middle\" font-size=\"13\" fill=\"#ffffff\">Blog post<\/text><rect x=\"420\" y=\"166\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#ED8924\"\/><text x=\"530\" y=\"188\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">BlogPosting + Person<\/text><path d=\"M266 183 H414\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M408 178 L418 183 L408 188 Z\" fill=\"#9aa8a6\"\/><rect x=\"40\" y=\"210\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#072328\"\/><text x=\"150\" y=\"232\" text-anchor=\"middle\" font-size=\"13\" fill=\"#ffffff\">Glossary entry<\/text><rect x=\"420\" y=\"210\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#ED8924\"\/><text x=\"530\" y=\"232\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">DefinedTerm<\/text><path d=\"M266 227 H414\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M408 222 L418 227 L408 232 Z\" fill=\"#9aa8a6\"\/><rect x=\"40\" y=\"254\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#072328\"\/><text x=\"150\" y=\"276\" text-anchor=\"middle\" font-size=\"13\" fill=\"#ffffff\">Product page<\/text><rect x=\"420\" y=\"254\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#ED8924\"\/><text x=\"530\" y=\"276\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">Product + Offer<\/text><path d=\"M266 271 H414\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M408 266 L418 271 L408 276 Z\" fill=\"#9aa8a6\"\/><rect x=\"40\" y=\"298\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#072328\"\/><text x=\"150\" y=\"320\" text-anchor=\"middle\" font-size=\"13\" fill=\"#ffffff\">Location page<\/text><rect x=\"420\" y=\"298\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#ED8924\"\/><text x=\"530\" y=\"320\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">LocalBusiness<\/text><path d=\"M266 315 H414\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M408 310 L418 315 L408 320 Z\" fill=\"#9aa8a6\"\/><rect x=\"40\" y=\"342\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#072328\"\/><text x=\"150\" y=\"364\" text-anchor=\"middle\" font-size=\"13\" fill=\"#ffffff\">Job ad<\/text><rect x=\"420\" y=\"342\" width=\"220\" height=\"34\" rx=\"6\" fill=\"#ED8924\"\/><text x=\"530\" y=\"364\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">JobPosting<\/text><path d=\"M266 359 H414\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M408 354 L418 359 L408 364 Z\" fill=\"#9aa8a6\"\/><text x=\"360\" y=\"404\" text-anchor=\"middle\" font-size=\"12\" fill=\"#55605f\">Everything else on the page is referenced by @id, never described twice.<\/text><text x=\"690\" y=\"420\" text-anchor=\"end\" font-size=\"11\" fill=\"#9aa8a6\">Fig. 1 &#183; taismo<\/text><\/g><\/svg><\/a><figcaption><strong>Fig. 1: One primary type per page, everything else referenced by @id.<\/strong><\/figcaption><\/figure>\n<table>\n<thead>\n<tr>\n<th>Page<\/th>\n<th>Primary type<\/th>\n<th>What it can earn<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Home page<\/td>\n<td><code>Organization<\/code> plus <code>WebSite<\/code><\/td>\n<td>Knowledge panel, sitelinks search box<\/td>\n<\/tr>\n<tr>\n<td>Service page<\/td>\n<td><code>Service<\/code><\/td>\n<td>Entity clarity, no rich result<\/td>\n<\/tr>\n<tr>\n<td>Blog post<\/td>\n<td><code>BlogPosting<\/code><\/td>\n<td>Article treatment, byline, dates<\/td>\n<\/tr>\n<tr>\n<td>Glossary entry<\/td>\n<td><code>DefinedTerm<\/code><\/td>\n<td>Entity clarity, citation in AI answers<\/td>\n<\/tr>\n<tr>\n<td>Product page<\/td>\n<td><code>Product<\/code> plus <code>Offer<\/code><\/td>\n<td>Price, availability, review stars<\/td>\n<\/tr>\n<tr>\n<td>Location page<\/td>\n<td><code>LocalBusiness<\/code><\/td>\n<td>Local and map treatment<\/td>\n<\/tr>\n<tr>\n<td>Job ad<\/td>\n<td><code>JobPosting<\/code><\/td>\n<td>Google job listings<\/td>\n<\/tr>\n<tr>\n<td>Event page<\/td>\n<td><code>Event<\/code><\/td>\n<td>Event results with date and venue<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Two types are missing from that table on purpose. <code>FAQPage<\/code> and <code>HowTo<\/code> once produced reliable rich results and produce none today. That has its own section further down, because the dates decide what is still worth building.<\/p>\n<h2 id=\"identity-layer\">Organization and Person: The layer you build once<\/h2>\n<p>Split your markup into two layers and the maintenance problem disappears. The identity layer describes what is true across the whole domain, the page layer describes one URL.<\/p>\n<p>The identity layer holds four entities in most cases: <code>Organization<\/code> (or <code>LocalBusiness<\/code> for a business with a service address), <code>WebSite<\/code>, <code>Brand<\/code>, and one <code>Person<\/code> per author. Define each exactly once, give it a stable <code>@id<\/code>, and never repeat its properties anywhere else.<\/p>\n<p>Two properties here carry more weight than the rest. <code>sameAs<\/code> lists the official profiles describing the same entity elsewhere: The company register entry, LinkedIn, review platforms, industry directories. Each is a corroborating source a machine can follow. <code>knowsAbout<\/code> names the topics the entity is competent in, and it gets considerably stronger when you point it at your own <code>DefinedTerm<\/code> nodes instead of at plain strings.<\/p>\n<p>The <code>Person<\/code> node is where <a href=\"https:\/\/taismo.de\/en\/what-is\/e-a-t\/\">E-E-A-T<\/a> becomes machine readable. An author name in a byline is text. A <code>Person<\/code> node with <code>sameAs<\/code> to real profiles and <code>worksFor<\/code> pointing at the organization is a claim a machine can check against other sources.<\/p>\n<p>For scale: The global graph on taismo.de holds 14 nodes and about 17,800 characters of minified JSON-LD. All 300 or so pages on the domain reference those 14 nodes rather than restating them, and that is the entire maintenance surface for the identity layer.<\/p>\n<h2 id=\"page-layer\">Article, Product and FAQPage<\/h2>\n<p>The page layer changes per URL and is where most implementation errors live, because it is the layer people generate automatically.<\/p>\n<p><strong><code>Article<\/code> and <code>BlogPosting<\/code><\/strong> need six properties to carry weight. Those are <code>headline<\/code>, <code>datePublished<\/code>, <code>dateModified<\/code>, <code>image<\/code>, <code>author<\/code> and <code>publisher<\/code>. The dates must be ISO 8601 with a timezone offset and must match what the page shows. A schema date that predates the visible one is a contradiction Google resolves by trusting neither.<\/p>\n<p><strong><code>Product<\/code><\/strong> carries a nested <code>Offer<\/code> with <code>price<\/code>, <code>priceCurrency<\/code> and <code>availability<\/code>. Adding <code>aggregateRating<\/code> is what produces stars, and it is also the fastest route to a manual action. The rating has to come from real reviews a visitor can read on that page. Invented ratings, ratings borrowed from another product, and company ratings placed on a product page are all policy violations. On a local page the honest route is a rating backed by visible <a href=\"https:\/\/taismo.de\/en\/what-is\/google-reviews\/\">Google reviews<\/a>.<\/p>\n<p><strong><code>FAQPage<\/code><\/strong> follows one rule that overrides everything else: The questions and answers in the markup must appear on the page in the same words. Marking up an FAQ that only exists in the JSON-LD is a guideline breach. Mark up the FAQ you actually show, for the machine readability, and expect no visual result at all. The section on retired features explains why.<\/p>\n<p><strong><code>BreadcrumbList<\/code><\/strong> is the cheapest node here. It replaces the raw URL in the search result with a readable path, takes four lines per page, and maps onto the <a href=\"https:\/\/taismo.de\/en\/what-is\/breadcrumb-navigation\/\">breadcrumb navigation<\/a> you already render.<\/p>\n<h2 id=\"specialist-types\">LocalBusiness, Event and JobPosting<\/h2>\n<p>Three specialist types repay the effort when the business model fits, and cost nothing but time when it does not.<\/p>\n<p><strong><code>LocalBusiness<\/code><\/strong> adds an address, geo coordinates, opening hours and a service area. A company with several branches gets one node per location, each with its own <code>@id<\/code> on its own location page, linked upward with <code>parentOrganization<\/code>. The mistake we see most often in <a href=\"https:\/\/taismo.de\/en\/local-seo-agency\/\">local SEO<\/a> work is a second <code>LocalBusiness<\/code> for the head office declared on every page, which turns one business into two competing entities.<\/p>\n<p><strong><code>Event<\/code><\/strong> needs <code>startDate<\/code>, <code>location<\/code> and, for paid events, an <code>Offer<\/code>. <strong><code>JobPosting<\/code><\/strong> feeds Google job listings and needs <code>datePosted<\/code>, <code>validThrough<\/code>, <code>hiringOrganization<\/code> and <code>jobLocation<\/code>. Both share the same weakness: They describe something with an expiry date, and markup that still calls a finished event upcoming or a filled vacancy open is a stale signal nobody notices.<\/p>\n<p><code>VideoObject<\/code>, <code>Recipe<\/code> and <code>Review<\/code> round out the set. Use each where the page genuinely contains that content, and skip the rest. Coverage is not the goal.<\/p>\n<h2 id=\"required-fields\">Required fields versus recommended fields<\/h2>\n<p>Every supported type splits its properties into two classes, and only one of them decides eligibility. Google&#8217;s guidelines are blunt about it: &#8220;Items that are missing required properties are not eligible for rich results.&#8221; Recommended properties widen what the result can show. Leaving them out costs detail, never eligibility.<\/p>\n<p>The table lists the required set for the eight types most sites touch, plus what is worth adding next.<\/p>\n<table>\n<thead>\n<tr>\n<th>Type<\/th>\n<th>Required<\/th>\n<th>Worth adding next<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>Article<\/code>, <code>BlogPosting<\/code><\/td>\n<td>None<\/td>\n<td><code>headline<\/code>, <code>image<\/code>, <code>datePublished<\/code>, <code>dateModified<\/code>, <code>author<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>Product<\/code> (product snippet)<\/td>\n<td><code>name<\/code>, plus one of <code>review<\/code>, <code>aggregateRating<\/code>, <code>offers<\/code><\/td>\n<td><code>brand<\/code>, <code>sku<\/code>, <code>offers.price<\/code>, <code>offers.priceCurrency<\/code>, <code>offers.availability<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>LocalBusiness<\/code><\/td>\n<td><code>name<\/code>, <code>address<\/code><\/td>\n<td><code>telephone<\/code>, <code>geo<\/code>, <code>url<\/code>, <code>openingHoursSpecification<\/code>, <code>priceRange<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>Event<\/code><\/td>\n<td><code>name<\/code>, <code>startDate<\/code>, <code>location<\/code>, <code>location.address<\/code><\/td>\n<td><code>endDate<\/code>, <code>eventStatus<\/code>, <code>image<\/code>, <code>offers<\/code>, <code>organizer<\/code>, <code>performer<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>JobPosting<\/code><\/td>\n<td><code>title<\/code>, <code>description<\/code>, <code>datePosted<\/code>, <code>hiringOrganization<\/code>, <code>jobLocation<\/code><\/td>\n<td><code>validThrough<\/code>, <code>baseSalary<\/code>, <code>employmentType<\/code>, <code>directApply<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>Recipe<\/code><\/td>\n<td><code>name<\/code>, <code>image<\/code><\/td>\n<td><code>recipeIngredient<\/code>, <code>recipeInstructions<\/code>, <code>prepTime<\/code>, <code>cookTime<\/code>, <code>nutrition<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>VideoObject<\/code><\/td>\n<td><code>name<\/code>, <code>thumbnailUrl<\/code>, <code>uploadDate<\/code><\/td>\n<td><code>description<\/code>, <code>contentUrl<\/code>, <code>embedUrl<\/code>, <code>duration<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>BreadcrumbList<\/code><\/td>\n<td><code>itemListElement<\/code> with <code>position<\/code> and <code>name<\/code><\/td>\n<td><code>item<\/code> on every level except the last<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Article is the outlier, and it explains a lot of bad article markup.<\/strong> Google states it twice on the same page: &#8220;There are no required properties; instead, add the properties that apply to your content.&#8221; An <code>Article<\/code> node therefore never fails a validator for a missing field. That is why article markup so often carries an author who left two years ago or a date that contradicts the byline. A validator checks whether a field exists. Nothing checks whether it is true.<\/p>\n<p><strong>Product is two features wearing one type.<\/strong> A product snippet needs <code>name<\/code> plus at least one of <code>review<\/code>, <code>aggregateRating<\/code> or <code>offers<\/code>. A merchant listing, the richer treatment for a page you can actually buy from, needs the offer detail: Price, currency and availability. Google notes that adding the merchant listing properties also makes the page eligible for product snippets, so on a shop you build the merchant listing set and get the smaller feature for free.<\/p>\n<p><strong>One line in the local business documentation costs more sites their stars than any other rule.<\/strong> There, <code>aggregateRating<\/code> and <code>review<\/code> are marked &#8220;only recommended for sites that capture reviews about other local businesses&#8221;. Your own rating, on your own location page, is not a supported use. On a product page the rating has to come from reviews a visitor can read on that same page. Anything else is the shortcut that ends in a manual action.<\/p>\n<p><strong><code>JobPosting<\/code> carries a deadline the other types do not.<\/strong> Google requires closed vacancies to be expired in one of three ways: Set <code>validThrough<\/code> to a past date, return 404 or 410 for the page, or remove the markup. The wording leaves no room: &#8220;Failure to take timely action on expired jobs may result in a manual action.&#8221; Put that step in the same checklist as taking the ad offline. It is the piece missing from almost every <a href=\"https:\/\/taismo.de\/en\/social-recruiting\/\">social recruiting<\/a> setup we inherit.<\/p>\n<h2 id=\"retired-features\">FAQ and HowTo: The types that stopped paying out<\/h2>\n<p>Two schema types are still valid, still parsed, still worth writing, and neither produces anything a visitor can see. The dates matter, because almost every guide on this topic predates them.<\/p>\n<ol>\n<li><strong>8 August 2023:<\/strong> Google removed HowTo rich results entirely and limited FAQ rich results to &#8220;well-known, authoritative government and health websites&#8221;. For everyone else the FAQ dropdown vanished that week.<\/li>\n<li><strong>7 May 2026:<\/strong> FAQ rich results stopped appearing in Google Search at all. The changelog entry of 8 May 2026 puts it in one sentence: &#8220;This feature will no longer appear in Google Search starting May 7, 2026.&#8221;<\/li>\n<li><strong>15 June 2026:<\/strong> Google deleted the feature documentation, logged as &#8220;Removing documentation for the FAQ rich result feature&#8221;.<\/li>\n<\/ol>\n<p>What remains is a shorter menu than most content plans assume. Google&#8217;s structured data gallery currently documents 25 features that can produce a rich result, among them Article, Product, Local business, Event, Job posting, Recipe, Video, Review snippet, Breadcrumb and Organization. FAQ and HowTo are not on that list.<\/p>\n<p>Two conclusions follow, and they pull in opposite directions.<\/p>\n<p><strong>Stop planning content around the feature.<\/strong> An FAQ block written to win more room in the search result now buys a feature that no longer exists. Any plugin still advertising &#8220;FAQ rich snippets&#8221; is selling a screenshot from 2022, and any agency pricing an FAQ rollout on that promise is selling the same one.<\/p>\n<p><strong>Keep the markup anyway.<\/strong> A marked up FAQ hands a machine a question and its answer, already paired, already scoped to one topic. That is the exact shape an AI assistant lifts when it answers and names a source. We still mark up every real FAQ block on taismo.de, including the one at the end of this article. The reason changed, the practice did not.<\/p>\n<p>One practical read of your own data: If your Search Console FAQ report dropped to zero valid items in May 2026, that is the deprecation and not a break in your markup. Do not hunt for the bug, and do not strip the type in response. Removing it costs machine readability and buys back nothing.<\/p>\n<h2 id=\"id-graph\">One graph instead of twelve snippets<\/h2>\n<p>Here is where solid markup separates from markup that compounds. A typical site carries schema from three sources at once: The SEO plugin, the theme, and whatever somebody pasted into a page builder two years ago. Each one describes the company again, slightly differently.<\/p>\n<p>The fix is <code>@id<\/code>. Every entity gets a stable identifier, usually the page URL plus a fragment, and wherever that entity appears again you write the reference instead of the description.<\/p>\n<figure><a href=\"https:\/\/taismo.de\/en\/seo-services\/\" title=\"SEO services from taismo: one entity graph, maintained in a monthly retainer\"><svg viewBox=\"0 0 720 380\" role=\"img\" aria-label=\"Scattered schema snippets compared with one connected @id graph\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:100%;height:auto\"><title>Scattered snippets versus one @id graph<\/title><rect width=\"720\" height=\"380\" fill=\"#f6f8f8\" rx=\"10\"\/><g font-family=\"Arial,sans-serif\"><text x=\"180\" y=\"38\" text-anchor=\"middle\" font-size=\"16\" font-weight=\"800\" fill=\"#072328\">Scattered snippets<\/text><text x=\"540\" y=\"38\" text-anchor=\"middle\" font-size=\"16\" font-weight=\"800\" fill=\"#072328\">One @id graph<\/text><rect x=\"42\" y=\"58\" width=\"120\" height=\"46\" rx=\"6\" fill=\"#9aa8a6\"\/><text x=\"102\" y=\"86\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">Organization<\/text><rect x=\"198\" y=\"58\" width=\"120\" height=\"46\" rx=\"6\" fill=\"#9aa8a6\"\/><text x=\"258\" y=\"86\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">Organization<\/text><rect x=\"42\" y=\"126\" width=\"120\" height=\"46\" rx=\"6\" fill=\"#9aa8a6\"\/><text x=\"102\" y=\"154\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">Article<\/text><rect x=\"198\" y=\"126\" width=\"120\" height=\"46\" rx=\"6\" fill=\"#9aa8a6\"\/><text x=\"258\" y=\"154\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">Person<\/text><rect x=\"42\" y=\"194\" width=\"120\" height=\"46\" rx=\"6\" fill=\"#9aa8a6\"\/><text x=\"102\" y=\"222\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">FAQPage<\/text><rect x=\"198\" y=\"194\" width=\"120\" height=\"46\" rx=\"6\" fill=\"#9aa8a6\"\/><text x=\"258\" y=\"222\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">Organization<\/text><text x=\"180\" y=\"272\" text-anchor=\"middle\" font-size=\"12\" fill=\"#55605f\">Three copies of one company,<\/text><text x=\"180\" y=\"290\" text-anchor=\"middle\" font-size=\"12\" fill=\"#55605f\">no link between the blocks.<\/text><path d=\"M355 60 V300\" stroke=\"#d9e0df\" stroke-width=\"2\"\/><circle cx=\"540\" cy=\"150\" r=\"46\" fill=\"#ED8924\"\/><text x=\"540\" y=\"146\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"800\" fill=\"#ffffff\">#organization<\/text><text x=\"540\" y=\"164\" text-anchor=\"middle\" font-size=\"11\" fill=\"#fdf0e2\">defined once<\/text><rect x=\"404\" y=\"62\" width=\"112\" height=\"38\" rx=\"6\" fill=\"#072328\"\/><text x=\"460\" y=\"86\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">#article<\/text><rect x=\"566\" y=\"62\" width=\"112\" height=\"38\" rx=\"6\" fill=\"#072328\"\/><text x=\"622\" y=\"86\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">#person<\/text><rect x=\"404\" y=\"238\" width=\"112\" height=\"38\" rx=\"6\" fill=\"#072328\"\/><text x=\"460\" y=\"262\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">#faqpage<\/text><rect x=\"566\" y=\"238\" width=\"112\" height=\"38\" rx=\"6\" fill=\"#072328\"\/><text x=\"622\" y=\"262\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">#service<\/text><path d=\"M478 100 L512 118\" stroke=\"#072328\" stroke-width=\"2\"\/><path d=\"M604 100 L570 118\" stroke=\"#072328\" stroke-width=\"2\"\/><path d=\"M478 238 L512 186\" stroke=\"#072328\" stroke-width=\"2\"\/><path d=\"M604 238 L570 186\" stroke=\"#072328\" stroke-width=\"2\"\/><text x=\"540\" y=\"320\" text-anchor=\"middle\" font-size=\"12\" fill=\"#55605f\">Every page points at the same node. Change it once, it changes everywhere.<\/text><text x=\"690\" y=\"366\" text-anchor=\"end\" font-size=\"11\" fill=\"#9aa8a6\">Fig. 2 &#183; taismo<\/text><\/g><\/svg><\/a><figcaption><strong>Fig. 2: Three descriptions of one company confuse a machine. One node with three references does not.<\/strong><\/figcaption><\/figure>\n<p><code>\"publisher\": { \"@id\": \"https:\/\/example.com\/#organization\" }<\/code><\/p>\n<p>Google merges nodes that share an <code>@id<\/code> into a single entity, even across separate script blocks. That is what makes coexistence possible: Your plugin keeps emitting its own graph, and a hand maintained block extends the same nodes instead of competing with them. We run exactly this setup on taismo.de.<\/p>\n<p>Two rules keep the graph honest. Identifiers must be stable, which means one canonical form of every URL, chosen once. And an entity is described in exactly one place, so changing the company address is one edit rather than a search across templates.<\/p>\n<div class=\"taismo-protipp\" style=\"display:flex;gap:12px;background:#fdf5ec;border:1px solid #f0e0cf;border-left:5px solid #ED8924;border-radius:10px;padding:16px 20px;margin:24px 0\">\n<div style=\"font-size:1.4em;line-height:1.1\">&#128161;<\/div>\n<div style=\"color:#3a4744;line-height:1.6\"><strong style=\"color:#ED8924\">Pro tip:<\/strong> Before you add anything, dump the JSON-LD of five representative URLs and count how many times your company appears. If the answer is more than one per page, you have a merge problem, not a coverage problem.<\/div>\n<\/div>\n<h2 id=\"formats\">JSON-LD, Microdata and RDFa<\/h2>\n<p>schema.org supplies the vocabulary. Three syntaxes carry it into a page, and the choice decides how long your markup survives contact with a design team.<\/p>\n<p>Microdata and RDFa wrap attributes around the visible HTML. A price becomes a <code>span<\/code> with an <code>itemprop<\/code>, the product becomes a <code>div<\/code> with an <code>itemscope<\/code>. The data lives inside the layout, which reads tidy until somebody replaces the layout. From then on every template change is a markup change, usually an unnoticed one.<\/p>\n<p>JSON-LD keeps the data in its own script block, separate from the HTML. Google names it the recommended format and calls it &#8220;the easiest solution for website owners to implement and maintain at scale&#8221;. The practical argument is ownership: One block, one owner, no dependency on which element happens to wrap the price this quarter.<\/p>\n<p>Placement is flexible. Google reads JSON-LD in the <code>head<\/code> and in the <code>body<\/code>, and it reads blocks that arrive later, &#8220;when it is dynamically injected into the page&#8217;s contents&#8221; by JavaScript. Rendered markup does get picked up. It also disappears silently when rendering fails, which is the whole argument for the server response.<\/p>\n<p>Formats coexist on one page, and that is where contradictions are born. A theme from 2016 with Microdata product markup plus a current plugin with JSON-LD gives a <a href=\"https:\/\/taismo.de\/en\/what-is\/crawler\/\">crawler<\/a> two descriptions of one product. Both get parsed, neither wins.<\/p>\n<p>Vocabularies expire as well. Google announced on 21 January 2020 that data-vocabulary.org markup would lose its eligibility, and from 6 April 2020 it triggered an error instead of a warning. Sites whose breadcrumbs used that vocabulary lost the display without anybody touching a line of code. Markup is not a one time project, and that is the cheapest proof of it.<\/p>\n<h2 id=\"where-the-code-goes\">Where the JSON-LD actually goes<\/h2>\n<p>Four delivery routes exist. They differ in how reliably the markup survives the next update.<\/p>\n<ul>\n<li><strong>SEO plugin:<\/strong> Covers the standard cases automatically and is the right starting point. It rarely covers services, glossary terms or multi location setups, and it cannot express a custom graph.<\/li>\n<li><strong>Theme or template code:<\/strong> Full control, and it disappears with the next theme update unless it lives in a child theme or a must use plugin. We have watched a parent theme update remove an entire graph.<\/li>\n<li><strong>A dedicated meta field plus a small plugin:<\/strong> The route we default to. The JSON-LD lives in a field per page, gets written through the API, and gets printed in the head by code no theme update touches.<\/li>\n<li><strong>Tag manager:<\/strong> Works, but the markup only exists after JavaScript runs. For anything load bearing, put it in the server response.<\/li>\n<\/ul>\n<p>One warning for page builder sites: Several builders strip <code>&lt;script&gt;<\/code> tags out of post content when they render. Markup pasted into the editor looks correct in the backend and never reaches the page. Check the rendered HTML, not the editor, whenever you use Elementor, Divi or YooTheme. A foundation that keeps markup where you put it is part of what we mean by <a href=\"https:\/\/taismo.de\/en\/webdesign\/\">SEO web design<\/a>.<\/p>\n<h2 id=\"cms\">WordPress, Shopify and the plugin problem<\/h2>\n<p>Almost nobody starts from an empty page. You start with a system that already emits markup, and the first job is finding out what it emits.<\/p>\n<p><strong>WordPress:<\/strong> Yoast SEO and Rank Math both output a complete <code>@graph<\/code> by default, typically Organization, WebSite, WebPage, Article, Person and BreadcrumbList, wired together by <code>@id<\/code>. That covers the identity layer and the standard page types without a line of code. What they do not cover: Your services, your glossary terms, a second location, and every type outside the standard set. What they cannot do: Stop a second plugin from describing the same company again.<\/p>\n<p>You can usually tell the blocks apart in the page source. Yoast writes one graph with fragment identifiers in the pattern <code>#\/schema\/logo\/image\/<\/code>. A review plugin writes a stand alone Product or Review node. A theme writes something with no <code>@id<\/code> at all, and that last one is the block that cannot be merged into anything and therefore has to go.<\/p>\n<p><strong>Shopify:<\/strong> The Product JSON-LD sits in the theme&#8217;s Liquid files, and review, subscription or bundle apps add their own on top. Same duplication, different stack. The fix lives in the theme file rather than in an app setting, and you verify it in the rendered source of a product page, never in the app preview.<\/p>\n<p><strong>Where the custom part belongs on WordPress:<\/strong> Not in <code>functions.php<\/code>. On taismo.de the JSON-LD of each page lives in its own meta field, written through the REST API and printed into the head by a must use plugin. A must use plugin loads before everything else and survives theme updates. We moved to that setup after a parent theme update wiped a connector out of <code>functions.php<\/code> and took the schema of every page with it.<\/p>\n<p>The rule that keeps a stack sane: One system owns each entity. The plugin can keep the identity layer, the custom block extends the same nodes through the same <code>@id<\/code>. Two systems describing one company is not redundancy. It is one contradiction with two authors.<\/p>\n<div class=\"taismo-cta-context\" style=\"background:#fdf5ec;border:1px solid #f0e0cf;border-left:5px solid #ED8924;border-radius:10px;padding:20px 24px;margin:28px 0\">\n<div style=\"font-weight:800;color:#072328;font-size:1.1em;margin-bottom:6px\">Is your markup one graph or twelve fragments?<\/div>\n<p style=\"margin:0 0 14px;color:#3a4744\">We map every schema block on your domain, merge the duplicates into a single entity graph, and keep it correct as templates change.<\/p>\n<p><a href=\"https:\/\/taismo.de\/en\/seo-services\/\" style=\"display:inline-block;background:#ED8924;color:#fff;font-weight:700;padding:10px 18px;border-radius:8px;text-decoration:none\">Build your entity graph with taismo<\/a><\/div>\n<h2 id=\"worked-example\">A worked example: One post, four nodes<\/h2>\n<p>Here is a complete blog post graph. Four nodes, two references to global entities defined elsewhere, nothing repeated:<\/p>\n<pre>{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"WebPage\",\n      \"@id\": \"https:\/\/example.com\/blog\/schema-markup\/\",\n      \"url\": \"https:\/\/example.com\/blog\/schema-markup\/\",\n      \"name\": \"Schema markup in practice\",\n      \"isPartOf\": { \"@id\": \"https:\/\/example.com\/#website\" },\n      \"primaryImageOfPage\": { \"@id\": \"https:\/\/example.com\/blog\/schema-markup\/#primaryimage\" },\n      \"breadcrumb\": { \"@id\": \"https:\/\/example.com\/blog\/schema-markup\/#breadcrumb\" },\n      \"mainEntity\": { \"@id\": \"https:\/\/example.com\/blog\/schema-markup\/#article\" },\n      \"inLanguage\": \"en-US\"\n    },\n    {\n      \"@type\": \"BlogPosting\",\n      \"@id\": \"https:\/\/example.com\/blog\/schema-markup\/#article\",\n      \"headline\": \"Schema markup in practice\",\n      \"datePublished\": \"2026-08-09T09:00:00+02:00\",\n      \"dateModified\": \"2026-08-09T09:00:00+02:00\",\n      \"author\": { \"@id\": \"https:\/\/example.com\/#person-jane-doe\" },\n      \"publisher\": { \"@id\": \"https:\/\/example.com\/#organization\" },\n      \"image\": { \"@id\": \"https:\/\/example.com\/blog\/schema-markup\/#primaryimage\" },\n      \"mainEntityOfPage\": { \"@id\": \"https:\/\/example.com\/blog\/schema-markup\/\" }\n    },\n    {\n      \"@type\": \"ImageObject\",\n      \"@id\": \"https:\/\/example.com\/blog\/schema-markup\/#primaryimage\",\n      \"contentUrl\": \"https:\/\/example.com\/img\/schema-markup.webp\",\n      \"width\": 1280,\n      \"height\": 720\n    },\n    {\n      \"@type\": \"BreadcrumbList\",\n      \"@id\": \"https:\/\/example.com\/blog\/schema-markup\/#breadcrumb\",\n      \"itemListElement\": [\n        { \"@type\": \"ListItem\", \"position\": 1, \"name\": \"Home\", \"item\": \"https:\/\/example.com\/\" },\n        { \"@type\": \"ListItem\", \"position\": 2, \"name\": \"Blog\", \"item\": \"https:\/\/example.com\/blog\/\" },\n        { \"@type\": \"ListItem\", \"position\": 3, \"name\": \"Schema markup in practice\" }\n      ]\n    }\n  ]\n}<\/pre>\n<p>Three details do the heavy lifting. The <code>author<\/code> and <code>publisher<\/code> values are references, not objects, so the person and the company stay defined in one place. Every <code>@id<\/code> is an absolute URL in the same canonical form. And the dates carry a timezone offset, which is what makes them unambiguous to a parser. Nothing here needs a generator, and a generator would work against you, because it produces isolated blocks by design.<\/p>\n<h2 id=\"testing\">Test it before Google does<\/h2>\n<p>Schema markup is invisible, so a broken block produces no symptom. One missing comma voids an entire graph while the page looks perfect. Three tools cover the ground, and they answer different questions.<\/p>\n<ol>\n<li><strong>Rich Results Test:<\/strong> Reports whether Google considers the page eligible for a specific rich result. It only covers types that produce a visual feature, so a valid <code>Service<\/code> node showing nothing here is expected, not a fault.<\/li>\n<li><strong>Schema Markup Validator:<\/strong> Checks the markup against the schema.org vocabulary, independent of Google. This is the tool that catches a misspelled property.<\/li>\n<li><strong><a href=\"https:\/\/taismo.de\/en\/what-is\/google-search-console\/\">Google Search Console<\/a>:<\/strong> Shows what Google actually parsed on your live URLs at scale. The other two test one URL you choose. This one reports the templates you forgot.<\/li>\n<\/ol>\n<p>One tool is missing from that list on purpose. The Structured Data Testing Tool, still linked in half the tutorials online, no longer exists in the form people remember. Google stripped the Google specific checks in December 2020 and handed the tool to the schema.org community, where it runs today as the Schema Markup Validator at validator.schema.org, announced in May 2021. Any instruction that starts with &#8220;open the Structured Data Testing Tool&#8221; was written before that handover.<\/p>\n<table>\n<thead>\n<tr>\n<th>The question you are actually asking<\/th>\n<th>The tool that answers it<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Is this URL eligible for a specific rich result?<\/td>\n<td>Rich Results Test<\/td>\n<\/tr>\n<tr>\n<td>Is this property valid schema.org?<\/td>\n<td>Schema Markup Validator<\/td>\n<\/tr>\n<tr>\n<td>Which templates across my whole site are broken?<\/td>\n<td>Search Console rich result status reports<\/td>\n<\/tr>\n<tr>\n<td>What does Google see after rendering?<\/td>\n<td>URL Inspection, live test<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Search Console sorts everything into two buckets, and the definitions are stricter than they look. A valid item &#8220;doesn&#8217;t have any critical issues and can appear on Google as a rich result&#8221;. An invalid item has &#8220;at least one critical issue preventing it from appearing as a rich result&#8221;. Everything else is a non critical issue and blocks nothing.<\/p>\n<p>The reports lag your deploy, because they show the last crawl and not your last commit. A template fixed on Monday can sit in the report as broken for a week. Use the Validate Fix button so Google recrawls the affected URLs, and check one live URL through the Rich Results Test in the meantime rather than watching a graph that has not been updated yet.<\/p>\n<p>Read errors and warnings differently. An error takes the feature off the table until you fix it. A warning names a recommended property you left out, and plenty of warnings are worth ignoring. Chasing every warning to zero is how teams end up marking up fields they cannot maintain.<\/p>\n<div class=\"taismo-protipp\" style=\"display:flex;gap:12px;background:#fdf5ec;border:1px solid #f0e0cf;border-left:5px solid #ED8924;border-radius:10px;padding:16px 20px;margin:24px 0\">\n<div style=\"font-size:1.4em;line-height:1.1\">&#128161;<\/div>\n<div style=\"color:#3a4744;line-height:1.6\"><strong style=\"color:#ED8924\">Pro tip:<\/strong> Test one URL per template, not ten URLs of the same type. Schema errors are template errors almost every time, so one blog post, one product, one location and one service page cover a site of any size.<\/div>\n<\/div>\n<h2 id=\"errors\">What the error messages actually mean<\/h2>\n<p>Both validators answer in short sentences that name a field and never a cause. Six messages cover almost everything you will meet in practice.<\/p>\n<table>\n<thead>\n<tr>\n<th>Message<\/th>\n<th>What actually happened<\/th>\n<th>What to do<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Unparsable structured data<\/td>\n<td>The JSON broke before any schema rule applied. Usually a trailing comma, a missing brace, or a curly quote pasted out of a word processor<\/td>\n<td>Run the raw block through a JSON parser first. No schema tool can help you until it parses<\/td>\n<\/tr>\n<tr>\n<td>Missing field &#8220;X&#8221; (error)<\/td>\n<td>A required property for the requested feature is absent<\/td>\n<td>Add the field, or accept that this page is not eligible for that feature<\/td>\n<\/tr>\n<tr>\n<td>Missing field &#8220;X&#8221; (warning)<\/td>\n<td>A recommended property is absent<\/td>\n<td>Decide deliberately. A warning you cannot answer honestly is better left open<\/td>\n<\/tr>\n<tr>\n<td>Invalid object type for field &#8220;X&#8221;<\/td>\n<td>A string sits where a nested object belongs, for example <code>\"publisher\": \"taismo\"<\/code> instead of an Organization node<\/td>\n<td>Replace the string with the object, or better with an <code>@id<\/code> reference to the node you already defined<\/td>\n<\/tr>\n<tr>\n<td>Either &#8220;offers&#8221;, &#8220;review&#8221; or &#8220;aggregateRating&#8221; should be specified<\/td>\n<td>A Product node with none of the three<\/td>\n<td>Add the offer if the page sells something. If it does not, the page is a product description and not a product snippet<\/td>\n<\/tr>\n<tr>\n<td>The value provided for X must be an ISO 8601 date<\/td>\n<td>A local date format, typically 09\/08\/2026 straight out of a CMS field<\/td>\n<td>Write <code>2026-08-09T09:00:00+02:00<\/code>, offset included<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Read the last two as a pair, because together they mark the border of what any tool can do for you. A Product without an offer is a structural fault, found instantly. A date in the wrong format is caught just as fast. A date in the right format that contradicts the byline on the page passes every validator you own. Nothing automated catches a well formed lie, which is why the release checklist matters more than the test run.<\/p>\n<h2 id=\"mistakes\">Seven mistakes that break schema markup<\/h2>\n<p>Seven failure patterns account for nearly everything we find in audits.<\/p>\n<ol>\n<li><strong>Marking up what the visitor cannot see.<\/strong> Prices, FAQ and reviews that exist only in the JSON-LD. This is the breach that draws a manual action.<\/li>\n<li><strong>Two blocks, one entity, different values.<\/strong> The plugin says one company name, the hand written block says another. Google trusts neither.<\/li>\n<li><strong>Invented or borrowed ratings.<\/strong> Company reviews attached to a product, or a rating with no visible source.<\/li>\n<li><strong>Type stacking.<\/strong> Nine types on a page that visibly contains two. Every extra type is a claim you have to keep true.<\/li>\n<li><strong>Unstable identifiers.<\/strong> An <code>@id<\/code> that switches between http and https, or between trailing slash and none, splits one entity into two.<\/li>\n<li><strong>Markup that only exists after JavaScript.<\/strong> It usually gets picked up, and it fails silently when rendering does.<\/li>\n<li><strong>Fossils after a relaunch.<\/strong> Old URLs in <code>@id<\/code>, an author who left, a price from two years ago.<\/li>\n<\/ol>\n<p>Six of the seven share one cause: Nobody owns the markup after launch. Put schema in the release checklist next to redirects and it stops happening.<\/p>\n<h2 id=\"ai-visibility\">What schema markup does for AI answers<\/h2>\n<p>The payoff that has grown fastest since 2024 sits outside classic search. AI assistants and <a href=\"https:\/\/taismo.de\/en\/what-is\/ai-overviews\/\">AI Overviews<\/a> have to decide which entity a page belongs to before they can cite it, and a clean graph answers that without inference.<\/p>\n<figure><a href=\"https:\/\/taismo.de\/en\/geo\/\" title=\"GEO from taismo: visibility inside AI answers, built on a clean entity graph\"><svg viewBox=\"0 0 720 360\" role=\"img\" aria-label=\"Two payoffs of schema markup: rich results in Google and a citable entity for AI answers\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:100%;height:auto\"><title>The two payoffs of schema markup<\/title><rect width=\"720\" height=\"360\" fill=\"#f6f8f8\" rx=\"10\"\/><g font-family=\"Arial,sans-serif\"><text x=\"360\" y=\"38\" text-anchor=\"middle\" font-size=\"19\" font-weight=\"800\" fill=\"#072328\">Two payoffs, one graph<\/text><rect x=\"270\" y=\"62\" width=\"180\" height=\"52\" rx=\"8\" fill=\"#ED8924\"\/><text x=\"360\" y=\"86\" text-anchor=\"middle\" font-size=\"14\" font-weight=\"800\" fill=\"#ffffff\">JSON-LD graph<\/text><text x=\"360\" y=\"104\" text-anchor=\"middle\" font-size=\"11\" fill=\"#fdf0e2\">typed, linked, consistent<\/text><path d=\"M300 114 L190 156\" stroke=\"#072328\" stroke-width=\"2\"\/><path d=\"M420 114 L530 156\" stroke=\"#072328\" stroke-width=\"2\"\/><rect x=\"50\" y=\"158\" width=\"280\" height=\"132\" rx=\"8\" fill=\"#072328\"\/><text x=\"190\" y=\"186\" text-anchor=\"middle\" font-size=\"15\" font-weight=\"700\" fill=\"#ffffff\">Google search<\/text><text x=\"190\" y=\"212\" text-anchor=\"middle\" font-size=\"12\" fill=\"#c9d6d3\">Eligibility for rich results:<\/text><text x=\"190\" y=\"232\" text-anchor=\"middle\" font-size=\"12\" fill=\"#c9d6d3\">stars, prices, breadcrumbs,<\/text><text x=\"190\" y=\"252\" text-anchor=\"middle\" font-size=\"12\" fill=\"#c9d6d3\">events, job listings<\/text><text x=\"190\" y=\"276\" text-anchor=\"middle\" font-size=\"12\" font-weight=\"700\" fill=\"#ED8924\">More clicks at the same rank<\/text><rect x=\"390\" y=\"158\" width=\"280\" height=\"132\" rx=\"8\" fill=\"#072328\"\/><text x=\"530\" y=\"186\" text-anchor=\"middle\" font-size=\"15\" font-weight=\"700\" fill=\"#ffffff\">AI answers<\/text><text x=\"530\" y=\"212\" text-anchor=\"middle\" font-size=\"12\" fill=\"#c9d6d3\">An unambiguous entity:<\/text><text x=\"530\" y=\"232\" text-anchor=\"middle\" font-size=\"12\" fill=\"#c9d6d3\">who you are, what you sell,<\/text><text x=\"530\" y=\"252\" text-anchor=\"middle\" font-size=\"12\" fill=\"#c9d6d3\">who writes for you<\/text><text x=\"530\" y=\"276\" text-anchor=\"middle\" font-size=\"12\" font-weight=\"700\" fill=\"#ED8924\">Fewer mix-ups, cleaner citations<\/text><text x=\"360\" y=\"322\" text-anchor=\"middle\" font-size=\"12\" fill=\"#55605f\">Neither payoff is a ranking boost. Both change what happens after the ranking.<\/text><text x=\"690\" y=\"346\" text-anchor=\"end\" font-size=\"11\" fill=\"#9aa8a6\">Fig. 3 &#183; taismo<\/text><\/g><\/svg><\/a><figcaption><strong>Fig. 3: Schema markup pays out twice, and neither payout is a ranking.<\/strong><\/figcaption><\/figure>\n<p>Be precise about the mechanism, because there is a lot of confident nonsense on this topic. No large language model provider publishes that it reads JSON-LD as a ranking input, and you should distrust anyone who claims otherwise. What structured data demonstrably does is remove ambiguity: It states which of the four companies with your name is yours, which topics you claim competence in, and who wrote the piece. Google&#8217;s own AI surfaces work on top of that same <a href=\"https:\/\/taismo.de\/en\/what-is\/knowledge-graph\/\">knowledge graph<\/a> layer.<\/p>\n<p>That makes markup one of the concrete levers in <a href=\"https:\/\/taismo.de\/en\/what-is\/generative-engine-optimization\/\">generative engine optimization<\/a>. It replaces neither content nor authority. It makes an <a href=\"https:\/\/taismo.de\/en\/what-is\/entity\/\">entity<\/a> resolvable, which is the condition for being cited correctly instead of being confused with a namesake.<\/p>\n<h2 id=\"rankings\">Does schema markup improve rankings?<\/h2>\n<p>No. Structured data is not a ranking factor, and Google has said so consistently since rich results launched. Anyone selling schema markup as a ranking lever is selling the wrong benefit.<\/p>\n<p>The effect lands on <a href=\"https:\/\/taismo.de\/en\/what-is\/ctr-click-through-rate\/\">click through rate<\/a> at a fixed position. A result carrying review stars, a price, a readable breadcrumb path or an event date takes up more space in the <a href=\"https:\/\/taismo.de\/en\/what-is\/serp\/\">SERP<\/a> and answers more of the question before the click. Position four with a rich result routinely outperforms position four without one.<\/p>\n<p>So schema markup is not the fix for a page that does not rank. It is what you do to a page that already ranks, so the ranking converts into visits.<\/p>\n<h2 id=\"rollout\">Your rollout in five steps<\/h2>\n<p>Five steps, in this order, get a site from nothing to a maintained graph:<\/p>\n<ol>\n<li><strong>Step 1: Inventory.<\/strong> Pull the JSON-LD from one URL per template, duplicates included.<\/li>\n<li><strong>Step 2: Identity layer.<\/strong> Define <code>Organization<\/code>, <code>WebSite<\/code> and one <code>Person<\/code> per author, once, with a complete <code>sameAs<\/code> list.<\/li>\n<li><strong>Step 3: Page layer.<\/strong> One primary type per template, referencing the identity layer instead of repeating it.<\/li>\n<li><strong>Step 4: Test.<\/strong> One URL per template through both validators, then watch Search Console for two weeks.<\/li>\n<li><strong>Step 5: Own it.<\/strong> Put a schema check in the release checklist, next to redirects.<\/li>\n<\/ol>\n<figure><a href=\"https:\/\/taismo.de\/en\/seo-audit\/\" title=\"SEO audit from taismo: Step 1 of this rollout, done for you\"><svg viewBox=\"0 0 720 280\" role=\"img\" aria-label=\"Five steps from no schema markup to a maintained entity graph\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:100%;height:auto\"><title>The five step rollout for schema markup<\/title><rect width=\"720\" height=\"280\" fill=\"#f6f8f8\" rx=\"10\"\/><g font-family=\"Arial,sans-serif\"><text x=\"360\" y=\"42\" text-anchor=\"middle\" font-size=\"19\" font-weight=\"800\" fill=\"#072328\">Five steps, and what each one leaves behind<\/text><rect x=\"20\" y=\"82\" width=\"120\" height=\"132\" rx=\"8\" fill=\"#072328\"\/><circle cx=\"80\" cy=\"104\" r=\"13\" fill=\"#ED8924\"\/><text x=\"80\" y=\"109\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"800\" fill=\"#ffffff\">1<\/text><text x=\"80\" y=\"139\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">Inventory<\/text><text x=\"80\" y=\"160\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">JSON-LD of one URL<\/text><text x=\"80\" y=\"175\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">per template,<\/text><text x=\"80\" y=\"190\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">duplicates included<\/text><path d=\"M142 148 H158\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M153 143 L160 148 L153 153 Z\" fill=\"#9aa8a6\"\/><rect x=\"160\" y=\"82\" width=\"120\" height=\"132\" rx=\"8\" fill=\"#072328\"\/><circle cx=\"220\" cy=\"104\" r=\"13\" fill=\"#ED8924\"\/><text x=\"220\" y=\"109\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"800\" fill=\"#ffffff\">2<\/text><text x=\"220\" y=\"139\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">Identity layer<\/text><text x=\"220\" y=\"160\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">Organization, WebSite,<\/text><text x=\"220\" y=\"175\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">one Person per author,<\/text><text x=\"220\" y=\"190\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">one @id each<\/text><path d=\"M282 148 H298\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M293 143 L300 148 L293 153 Z\" fill=\"#9aa8a6\"\/><rect x=\"300\" y=\"82\" width=\"120\" height=\"132\" rx=\"8\" fill=\"#072328\"\/><circle cx=\"360\" cy=\"104\" r=\"13\" fill=\"#ED8924\"\/><text x=\"360\" y=\"109\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"800\" fill=\"#ffffff\">3<\/text><text x=\"360\" y=\"139\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">Page layer<\/text><text x=\"360\" y=\"160\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">one primary type<\/text><text x=\"360\" y=\"175\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">per template,<\/text><text x=\"360\" y=\"190\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">referenced not repeated<\/text><path d=\"M422 148 H438\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M433 143 L440 148 L433 153 Z\" fill=\"#9aa8a6\"\/><rect x=\"440\" y=\"82\" width=\"120\" height=\"132\" rx=\"8\" fill=\"#072328\"\/><circle cx=\"500\" cy=\"104\" r=\"13\" fill=\"#ED8924\"\/><text x=\"500\" y=\"109\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"800\" fill=\"#ffffff\">4<\/text><text x=\"500\" y=\"139\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">Test<\/text><text x=\"500\" y=\"160\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">both validators,<\/text><text x=\"500\" y=\"175\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">then Search Console<\/text><text x=\"500\" y=\"190\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">for two weeks<\/text><path d=\"M562 148 H578\" stroke=\"#9aa8a6\" stroke-width=\"2\"\/><path d=\"M573 143 L580 148 L573 153 Z\" fill=\"#9aa8a6\"\/><rect x=\"580\" y=\"82\" width=\"120\" height=\"132\" rx=\"8\" fill=\"#072328\"\/><circle cx=\"640\" cy=\"104\" r=\"13\" fill=\"#ED8924\"\/><text x=\"640\" y=\"109\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"800\" fill=\"#ffffff\">5<\/text><text x=\"640\" y=\"139\" text-anchor=\"middle\" font-size=\"13\" font-weight=\"700\" fill=\"#ffffff\">Own it<\/text><text x=\"640\" y=\"160\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">a schema check in<\/text><text x=\"640\" y=\"175\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">the release checklist,<\/text><text x=\"640\" y=\"190\" text-anchor=\"middle\" font-size=\"10\" fill=\"#c9d6d3\">next to redirects<\/text><text x=\"360\" y=\"244\" text-anchor=\"middle\" font-size=\"12\" fill=\"#55605f\">Every step ends in something a named person owns.<\/text><text x=\"690\" y=\"268\" text-anchor=\"end\" font-size=\"11\" fill=\"#9aa8a6\">Fig. 4 &#183; taismo<\/text><\/g><\/svg><\/a><figcaption><strong>Fig. 4: The rollout in five steps, each with the artifact it produces.<\/strong><\/figcaption><\/figure>\n<p>Steps 1 and 2 take a few days and produce most of the value. Steps 3 to 5 stop it decaying.<\/p>\n<div class=\"taismo-cta-final\" style=\"background:#072328;color:#fff;border-radius:12px;padding:28px;margin:32px 0\">\n<div style=\"font-size:1.3em;font-weight:800;margin-bottom:8px\">Markup that stays correct after the next relaunch.<\/div>\n<p style=\"margin:0 0 18px;color:#c9d6d3;max-width:640px\">taismo is an SEO and GEO agency from Munich, ranked fifth in the German SEO Contest 2026 and second among Munich online marketing agencies by Agenturtipp. We audit every schema block on your domain, merge it into one entity graph, and maintain it in an <a href=\"https:\/\/taismo.de\/en\/seo-services\/\" style=\"color:#ED8924;font-weight:700\">SEO retainer<\/a>.<\/p>\n<p><a href=\"https:\/\/taismo.de\/en\/seo-audit\/\" style=\"display:inline-block;background:#ED8924;color:#fff;font-weight:800;padding:12px 22px;border-radius:8px;text-decoration:none\">Start your schema audit<\/a><\/div>\n<h2 id=\"faq\">Schema markup FAQ<\/h2>\n<h3>What is schema markup?<\/h3>\n<p>Schema markup is code that describes the content of a page using the schema.org vocabulary, written in JSON-LD and placed in the page source. It tells search engines and AI systems what the page is rather than letting them infer it from prose.<\/p>\n<h3>Does schema markup help SEO?<\/h3>\n<p>Yes, indirectly. Structured data is not a ranking factor, but rich results raise the click through rate at an unchanged position, and a clean entity graph improves how correctly search engines and AI systems attribute your content.<\/p>\n<h3>How do you add schema markup to a website?<\/h3>\n<p>Write the JSON-LD, then deliver it through an SEO plugin, a template, or a dedicated field printed into the head by a small plugin. Put it in the server response rather than in a tag manager, so the markup exists before JavaScript runs.<\/p>\n<h3>How do you test schema markup?<\/h3>\n<p>Run one URL per template through Google&#8217;s Rich Results Test for eligibility and through the Schema Markup Validator for vocabulary errors, then check Search Console to see what Google parsed on your live pages.<\/p>\n<h3>How many schema types should one page have?<\/h3>\n<p>One primary type that matches what the page visibly is, plus the global entities referenced by @id. Additional types are only worth adding when the page genuinely contains that content, because every type is a claim you have to keep true.<\/p>\n<h3>Does FAQ schema still work?<\/h3>\n<p>Not as a search feature. Google switched FAQ rich results off on 7 May 2026, after limiting them to government and health sites in August 2023. <code>FAQPage<\/code> remains valid schema.org and still gives machines and AI systems a clean question and answer pair, so mark up the FAQ blocks you really show and expect no visual result.<\/p>\n<h3>Should you use JSON-LD or Microdata?<\/h3>\n<p>JSON-LD. Google names it the recommended format because it lives in its own script block, independent of the HTML around it, so a redesign cannot quietly break it. Microdata and RDFa carry the same vocabulary inside the visible markup, which ties your data to your layout.<\/p>\n<h3>Which schema types produce a rich result?<\/h3>\n<p>Google&#8217;s structured data gallery currently documents 25 features, among them Article, Product, Local business, Event, Job posting, Recipe, Video, Review snippet, Breadcrumb and Organization. FAQ and HowTo were removed and no longer appear there.<\/p>\n<h2 id=\"sources\">Sources<\/h2>\n<ul class=\"taismo-quellen\" style=\"font-size:0.92em;line-height:1.65;color:#3a4744\">\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/intro-structured-data\" target=\"_blank\" rel=\"noopener noreferrer\">Intro to how structured data markup works<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/sd-policies\" target=\"_blank\" rel=\"noopener noreferrer\">General structured data guidelines<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/search-gallery\" target=\"_blank\" rel=\"noopener noreferrer\">Structured data markup that Google Search supports<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/blog\/2023\/08\/howto-faq-changes\" target=\"_blank\" rel=\"noopener noreferrer\">Changes to HowTo and FAQ rich results<\/a>&#8221;, Google, August 2023.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/faqpage\" target=\"_blank\" rel=\"noopener noreferrer\">FAQPage (FAQ) structured data<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/local-business\" target=\"_blank\" rel=\"noopener noreferrer\">Local business (LocalBusiness) structured data<\/a>&#8221;, Google, 2026.<\/li>\n<li>schema.org: &#8220;<a href=\"https:\/\/schema.org\/docs\/schemas.html\" target=\"_blank\" rel=\"noopener noreferrer\">Organization of Schemas<\/a>&#8221;, Schema.org Community Group, 2026.<\/li>\n<li>Schema Markup Validator: &#8220;<a href=\"https:\/\/validator.schema.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Schema Markup Validator<\/a>&#8221;, Schema.org Community Group, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/updates\" target=\"_blank\" rel=\"noopener noreferrer\">What&#8217;s new in Search Central<\/a>&#8221; (changelog entries &#8220;Deprecating the FAQ rich result feature&#8221;, 8 May 2026, and &#8220;Removing documentation for the FAQ rich result feature&#8221;, 15 June 2026), Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/article\" target=\"_blank\" rel=\"noopener noreferrer\">Article (Article, NewsArticle, BlogPosting) structured data<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/product-snippet\" target=\"_blank\" rel=\"noopener noreferrer\">Product snippet (Product, Review, Offer) structured data<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/event\" target=\"_blank\" rel=\"noopener noreferrer\">Event (Event, EventSeries) structured data<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/job-posting\" target=\"_blank\" rel=\"noopener noreferrer\">Job posting (JobPosting) structured data<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/recipe\" target=\"_blank\" rel=\"noopener noreferrer\">Recipe (Recipe, HowTo) structured data<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/video\" target=\"_blank\" rel=\"noopener noreferrer\">Video (VideoObject, Clip, BroadcastEvent) structured data<\/a>&#8221;, Google, 2026.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/blog\/2020\/01\/data-vocabulary\" target=\"_blank\" rel=\"noopener noreferrer\">Sunsetting support for data-vocabulary<\/a>&#8221;, Google, 21 January 2020.<\/li>\n<li>Google Search Central: &#8220;<a href=\"https:\/\/developers.google.com\/search\/blog\/2020\/12\/structured-data-testing-tool-update\" target=\"_blank\" rel=\"noopener noreferrer\">An update on the Structured Data Testing Tool<\/a>&#8221;, Google, December 2020.<\/li>\n<li>Schema.org: &#8220;<a href=\"https:\/\/blog.schema.org\/2021\/05\/21\/announcing-schema-markup-validator-validator-schema-org-beta\/\" target=\"_blank\" rel=\"noopener noreferrer\">Announcing Schema Markup Validator<\/a>&#8221;, Schema.org Community Group, 21 May 2021.<\/li>\n<li>Google Search Console Help: &#8220;<a href=\"https:\/\/support.google.com\/webmasters\/answer\/7552505\" target=\"_blank\" rel=\"noopener noreferrer\">Rich result status reports<\/a>&#8221;, Google, 2026.<\/li>\n<\/ul><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Contents What schema markup changes Pick the type before you write code Organization and Person: The layer you build once Article, Product and FAQPage LocalBusiness, Event and JobPosting Required fields versus recommended fields FAQ and HowTo: The types that stopped paying out One graph instead of twelve snippets JSON-LD, Microdata and RDFa Where the JSON-LD [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":6634,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_taismo_jsonld":"","taismo_jsonld":"{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/\",\"url\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/\",\"name\":\"Schema Markup in Practice: Which Types to Use and How to Ship Them\",\"description\":\"Schema markup in practice: Which schema type belongs on which page, how to link them into one @id graph, where the JSON-LD goes and how to test it.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\/\/taismo.de\/#website\"},\"author\":{\"@id\":\"https:\/\/taismo.de\/#person-dominik-breitbach\"},\"publisher\":{\"@id\":\"https:\/\/taismo.de\/#organization\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#primaryimage\"},\"breadcrumb\":{\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#breadcrumb\"},\"mainEntity\":{\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#article\"},\"hasPart\":{\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#faqpage\"},\"datePublished\":\"2026-08-09T09:00:00+02:00\",\"dateModified\":\"2026-08-09T09:00:00+02:00\",\"speakable\":{\"@type\":\"SpeakableSpecification\",\"cssSelector\":[\".brand-claim\",\".lead-def\"]}},{\"@type\":\"BlogPosting\",\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/\"},\"mainEntityOfPage\":{\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/\"},\"headline\":\"Schema Markup in Practice: Which Types to Use and How to Ship Them\",\"description\":\"A practical guide to schema markup: One primary type per page, the identity layer built once, the @id graph that merges plugin and custom output, delivery routes, testing and the seven mistakes that break it.\",\"articleSection\":\"Structured data\",\"keywords\":[\"schema markup\",\"schema markup seo\",\"structured data seo\",\"json-ld\",\"organization schema\",\"local business schema\",\"faq schema\",\"rich results\"],\"wordCount\":5277,\"inLanguage\":\"en-US\",\"datePublished\":\"2026-08-09T09:00:00+02:00\",\"dateModified\":\"2026-08-09T09:00:00+02:00\",\"author\":{\"@id\":\"https:\/\/taismo.de\/#person-dominik-breitbach\"},\"publisher\":{\"@id\":\"https:\/\/taismo.de\/#organization\"},\"image\":{\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#primaryimage\"},\"about\":[{\"@id\":\"https:\/\/taismo.de\/en\/what-is\/structured-data\/#definedterm\"},{\"@id\":\"https:\/\/taismo.de\/en\/what-is\/json-ld\/#definedterm\"},{\"@id\":\"https:\/\/taismo.de\/en\/what-is\/rich-snippets\/#definedterm\"}],\"mentions\":[{\"@id\":\"https:\/\/taismo.de\/en\/what-is\/knowledge-graph\/#definedterm\"},{\"@id\":\"https:\/\/taismo.de\/en\/what-is\/entity\/#definedterm\"},{\"@id\":\"https:\/\/taismo.de\/en\/what-is\/e-a-t\/#definedterm\"},{\"@id\":\"https:\/\/taismo.de\/en\/what-is\/breadcrumb-navigation\/#definedterm\"},{\"@id\":\"https:\/\/taismo.de\/en\/what-is\/generative-engine-optimization\/#definedterm\"},{\"@id\":\"https:\/\/taismo.de\/en\/what-is\/ai-overviews\/#definedterm\"}],\"speakable\":{\"@type\":\"SpeakableSpecification\",\"cssSelector\":[\".brand-claim\",\".lead-def\"]}},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#primaryimage\",\"url\":\"https:\/\/taismo.de\/wp-content\/uploads\/2026\/07\/schema-org-json-ld.webp\",\"contentUrl\":\"https:\/\/taismo.de\/wp-content\/uploads\/2026\/07\/schema-org-json-ld.webp\",\"width\":1280,\"height\":720,\"caption\":\"Schema markup in practice: choosing schema types, building a JSON-LD graph and testing it\",\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/taismo.de\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SEO Magazine\",\"item\":\"https:\/\/taismo.de\/en\/seo-magazine\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Schema markup\",\"item\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/\"}]},{\"@type\":\"FAQPage\",\"@id\":\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#faqpage\",\"inLanguage\":\"en-US\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is schema markup?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Schema markup is code that describes the content of a page using the schema.org vocabulary, written in JSON-LD and placed in the page source. It tells search engines and AI systems what the page is rather than letting them infer it from prose.\"}},{\"@type\":\"Question\",\"name\":\"Does schema markup help SEO?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, indirectly. Structured data is not a ranking factor, but rich results raise the click through rate at an unchanged position, and a clean entity graph improves how correctly search engines and AI systems attribute your content.\"}},{\"@type\":\"Question\",\"name\":\"How do you add schema markup to a website?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Write the JSON-LD, then deliver it through an SEO plugin, a template, or a dedicated field printed into the head by a small plugin. Put it in the server response rather than in a tag manager, so the markup exists before JavaScript runs.\"}},{\"@type\":\"Question\",\"name\":\"How do you test schema markup?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Run one URL per template through Google's Rich Results Test for eligibility and through the Schema Markup Validator for vocabulary errors, then check Search Console to see what Google parsed on your live pages.\"}},{\"@type\":\"Question\",\"name\":\"How many schema types should one page have?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"One primary type that matches what the page visibly is, plus the global entities referenced by @id. Additional types are only worth adding when the page genuinely contains that content, because every type is a claim you have to keep true.\"}},{\"@type\":\"Question\",\"name\":\"Does FAQ schema still work?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Not as a search feature. Google switched FAQ rich results off on 7 May 2026, after limiting them to government and health sites in August 2023. FAQPage remains valid schema.org and still gives machines and AI systems a clean question and answer pair, so mark up the FAQ blocks you really show and expect no visual result.\"}},{\"@type\":\"Question\",\"name\":\"Should you use JSON-LD or Microdata?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"JSON-LD. Google names it the recommended format because it lives in its own script block, independent of the HTML around it, so a redesign cannot quietly break it. Microdata and RDFa carry the same vocabulary inside the visible markup, which ties your data to your layout.\"}},{\"@type\":\"Question\",\"name\":\"Which schema types produce a rich result?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Google's structured data gallery currently documents 25 features, among them Article, Product, Local business, Event, Job posting, Recipe, Video, Review snippet, Breadcrumb and Organization. FAQ and HowTo were removed and no longer appear there.\"}}]}]}","footnotes":""},"categories":[81],"tags":[],"class_list":["post-7398","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seo-magazine"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Schema Markup: Types, Setup and Testing Guide | taismo<\/title>\n<meta name=\"description\" content=\"Most schema markup fails silently. See which types earn rich results, how to link them into one @id graph, and how to test it. Start here \ud83d\ude80\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Schema Markup: Types, Setup and Testing Guide | taismo\" \/>\n<meta property=\"og:description\" content=\"Most schema markup fails silently. See which types earn rich results, how to link them into one @id graph, and how to test it. Start here \ud83d\ude80\" \/>\n<meta property=\"og:url\" content=\"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/\" \/>\n<meta property=\"og:site_name\" content=\"taismo| Agentur f\u00fcr SEO &amp; Webdesign\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/TaismoOnlineMarketing\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-09T07:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/taismo.de\/wp-content\/uploads\/2026\/07\/schema-org-json-ld.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1344\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Dominik Breitbach\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/\"},\"author\":{\"name\":\"Dominik Breitbach\",\"@id\":\"https:\\\/\\\/taismo.de\\\/#person-dominik-breitbach\"},\"headline\":\"Schema Markup in Practice: Which Types to Use and How to Ship Them\",\"datePublished\":\"2026-08-09T07:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/\"},\"wordCount\":5499,\"publisher\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/taismo.de\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/schema-org-json-ld.webp\",\"articleSection\":[\"SEO Magazine\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/\",\"url\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/\",\"name\":\"Schema Markup: Types, Setup and Testing Guide | taismo\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/taismo.de\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/schema-org-json-ld.webp\",\"datePublished\":\"2026-08-09T07:00:00+00:00\",\"description\":\"Most schema markup fails silently. See which types earn rich results, how to link them into one @id graph, and how to test it. Start here \ud83d\ude80\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/#primaryimage\",\"url\":\"https:\\\/\\\/taismo.de\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/schema-org-json-ld.webp\",\"contentUrl\":\"https:\\\/\\\/taismo.de\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/schema-org-json-ld.webp\",\"width\":1344,\"height\":768,\"caption\":\"Schema.org und JSON-LD: Laptop mit leuchtendem Code und verbundenen Datenknoten\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/seo-magazine\\\/schema-markup\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/taismo.de\\\/en\\\/search-marketing\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Schema Markup in Practice: Which Types to Use and How to Ship Them\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/taismo.de\\\/en\\\/\",\"name\":\"taismo| Agentur f\u00fcr SEO & Webdesign\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/#organization\"},\"alternateName\":\"taismo\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/taismo.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/#organization\",\"name\":\"taismo SEO Agentur M\u00fcnchen\",\"alternateName\":\"taismo\",\"url\":\"https:\\\/\\\/taismo.de\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/taismo.de\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/cropped-favicon.png\",\"contentUrl\":\"https:\\\/\\\/taismo.de\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/cropped-favicon.png\",\"width\":512,\"height\":512,\"caption\":\"taismo SEO Agentur M\u00fcnchen\"},\"image\":{\"@id\":\"https:\\\/\\\/taismo.de\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/TaismoOnlineMarketing\",\"https:\\\/\\\/branchenbuch.portal.muenchen.de\\\/mhp\\\/1380360\\\/\",\"https:\\\/\\\/www.crunchbase.com\\\/organization\\\/taismo-gmbh\",\"https:\\\/\\\/de.trustpilot.com\\\/review\\\/taismo.de\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/taismo\\\/\",\"https:\\\/\\\/www.instagram.com\\\/taismo.de\",\"https:\\\/\\\/onlinemarketing.de\\\/dienstleister\\\/online-marketing-agentur\\\/kirchheim-bei-muenchen\\\/taismo\",\"https:\\\/\\\/www.agenturtipp.de\\\/agentur\\\/taismo-online-marketing\\\/\",\"https:\\\/\\\/startupvalley.news\\\/de\\\/taismo-online-marketing-agentur\\\/\",\"https:\\\/\\\/www.wlw.de\\\/de\\\/firma\\\/taismo-gmbh-1918135\",\"https:\\\/\\\/www.youtube.com\\\/@taismo8632\",\"https:\\\/\\\/techbehemoths.com\\\/company\\\/taismo-gmbh\",\"https:\\\/\\\/www.kununu.com\\\/de\\\/taismo1\",\"https:\\\/\\\/www.provenexpert.com\\\/taismo1\\\/\",\"https:\\\/\\\/www.provenemployer.com\\\/p\\\/taismo-employer\\\/\",\"https:\\\/\\\/www.trustedshops.de\\\/bewertung\\\/taismo-de\",\"https:\\\/\\\/www.kennstdueinen.de\\\/online-marketing-kirchheim-bei-muenchen-taismo-gmbh-d2136613.html\",\"https:\\\/\\\/www.ibusiness.de\\\/dienstleister\\\/jb\\\/5920834fb726.html\",\"https:\\\/\\\/www.seo-united.de\\\/seo-agenturen\\\/taismo-3345\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Schema Markup: Types, Setup and Testing Guide | taismo","description":"Most schema markup fails silently. See which types earn rich results, how to link them into one @id graph, and how to test it. Start here \ud83d\ude80","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/","og_locale":"en_US","og_type":"article","og_title":"Schema Markup: Types, Setup and Testing Guide | taismo","og_description":"Most schema markup fails silently. See which types earn rich results, how to link them into one @id graph, and how to test it. Start here \ud83d\ude80","og_url":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/","og_site_name":"taismo| Agentur f\u00fcr SEO &amp; Webdesign","article_publisher":"https:\/\/www.facebook.com\/TaismoOnlineMarketing","article_published_time":"2026-08-09T07:00:00+00:00","og_image":[{"width":1344,"height":768,"url":"https:\/\/taismo.de\/wp-content\/uploads\/2026\/07\/schema-org-json-ld.webp","type":"image\/webp"}],"author":"Dominik Breitbach","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#article","isPartOf":{"@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/"},"author":{"name":"Dominik Breitbach","@id":"https:\/\/taismo.de\/#person-dominik-breitbach"},"headline":"Schema Markup in Practice: Which Types to Use and How to Ship Them","datePublished":"2026-08-09T07:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/"},"wordCount":5499,"publisher":{"@id":"https:\/\/taismo.de\/en\/#organization"},"image":{"@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#primaryimage"},"thumbnailUrl":"https:\/\/taismo.de\/wp-content\/uploads\/2026\/07\/schema-org-json-ld.webp","articleSection":["SEO Magazine"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/","url":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/","name":"Schema Markup: Types, Setup and Testing Guide | taismo","isPartOf":{"@id":"https:\/\/taismo.de\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#primaryimage"},"image":{"@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#primaryimage"},"thumbnailUrl":"https:\/\/taismo.de\/wp-content\/uploads\/2026\/07\/schema-org-json-ld.webp","datePublished":"2026-08-09T07:00:00+00:00","description":"Most schema markup fails silently. See which types earn rich results, how to link them into one @id graph, and how to test it. Start here \ud83d\ude80","breadcrumb":{"@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#primaryimage","url":"https:\/\/taismo.de\/wp-content\/uploads\/2026\/07\/schema-org-json-ld.webp","contentUrl":"https:\/\/taismo.de\/wp-content\/uploads\/2026\/07\/schema-org-json-ld.webp","width":1344,"height":768,"caption":"Schema.org und JSON-LD: Laptop mit leuchtendem Code und verbundenen Datenknoten"},{"@type":"BreadcrumbList","@id":"https:\/\/taismo.de\/en\/seo-magazine\/schema-markup\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/taismo.de\/en\/search-marketing\/"},{"@type":"ListItem","position":2,"name":"Schema Markup in Practice: Which Types to Use and How to Ship Them"}]},{"@type":"WebSite","@id":"https:\/\/taismo.de\/en\/#website","url":"https:\/\/taismo.de\/en\/","name":"taismo| Agentur f\u00fcr SEO & Webdesign","description":"","publisher":{"@id":"https:\/\/taismo.de\/en\/#organization"},"alternateName":"taismo","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/taismo.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/taismo.de\/en\/#organization","name":"taismo SEO Agentur M\u00fcnchen","alternateName":"taismo","url":"https:\/\/taismo.de\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/taismo.de\/en\/#\/schema\/logo\/image\/","url":"https:\/\/taismo.de\/wp-content\/uploads\/2024\/09\/cropped-favicon.png","contentUrl":"https:\/\/taismo.de\/wp-content\/uploads\/2024\/09\/cropped-favicon.png","width":512,"height":512,"caption":"taismo SEO Agentur M\u00fcnchen"},"image":{"@id":"https:\/\/taismo.de\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/TaismoOnlineMarketing","https:\/\/branchenbuch.portal.muenchen.de\/mhp\/1380360\/","https:\/\/www.crunchbase.com\/organization\/taismo-gmbh","https:\/\/de.trustpilot.com\/review\/taismo.de","https:\/\/www.linkedin.com\/company\/taismo\/","https:\/\/www.instagram.com\/taismo.de","https:\/\/onlinemarketing.de\/dienstleister\/online-marketing-agentur\/kirchheim-bei-muenchen\/taismo","https:\/\/www.agenturtipp.de\/agentur\/taismo-online-marketing\/","https:\/\/startupvalley.news\/de\/taismo-online-marketing-agentur\/","https:\/\/www.wlw.de\/de\/firma\/taismo-gmbh-1918135","https:\/\/www.youtube.com\/@taismo8632","https:\/\/techbehemoths.com\/company\/taismo-gmbh","https:\/\/www.kununu.com\/de\/taismo1","https:\/\/www.provenexpert.com\/taismo1\/","https:\/\/www.provenemployer.com\/p\/taismo-employer\/","https:\/\/www.trustedshops.de\/bewertung\/taismo-de","https:\/\/www.kennstdueinen.de\/online-marketing-kirchheim-bei-muenchen-taismo-gmbh-d2136613.html","https:\/\/www.ibusiness.de\/dienstleister\/jb\/5920834fb726.html","https:\/\/www.seo-united.de\/seo-agenturen\/taismo-3345\/"]}]}},"_links":{"self":[{"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/posts\/7398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/comments?post=7398"}],"version-history":[{"count":1,"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/posts\/7398\/revisions"}],"predecessor-version":[{"id":7399,"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/posts\/7398\/revisions\/7399"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/media\/6634"}],"wp:attachment":[{"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/media?parent=7398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/categories?post=7398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/taismo.de\/en\/wp-json\/wp\/v2\/tags?post=7398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}