{"id":48899,"date":"2026-03-15T10:34:33","date_gmt":"2026-03-15T02:34:33","guid":{"rendered":"https:\/\/www.geobok.com\/geo-toolkit\/schema-structured-data-checker\/"},"modified":"2026-04-03T10:59:22","modified_gmt":"2026-04-03T02:59:22","slug":"schema-structured-data-checker","status":"publish","type":"page","link":"https:\/\/www.geobok.com\/en\/geo-toolkit\/schema-structured-data-checker\/","title":{"rendered":"Schema Structured Data Checker"},"content":{"rendered":"\n<style>\n\/* ===== C2 \u7279\u6709\u6837\u5f0f ===== *\/\n\n\/* \u603b\u89c8\u72b6\u6001\u6761 *\/\n.sc-summary { display: flex; align-items: center; gap: 16px; padding: 20px 24px; border-radius: var(--geo-radius-md); margin-bottom: 20px; }\n.sc-summary--good { background: var(--geo-success-bg); border: 1px solid var(--geo-success-border); }\n.sc-summary--good .sc-summary__text { color: #166534; }\n.sc-summary--fair { background: var(--geo-info-bg); border: 1px solid #bae6fd; }\n.sc-summary--fair .sc-summary__text { color: #075985; }\n.sc-summary--weak { background: var(--geo-warn-bg); border: 1px solid var(--geo-warn-border); }\n.sc-summary--weak .sc-summary__text { color: #92400e; }\n.sc-summary--none { background: var(--geo-danger-bg); border: 1px solid var(--geo-danger-border); }\n.sc-summary--none .sc-summary__text { color: #991b1b; }\n.sc-summary__icon { font-size: 30px; flex-shrink: 0; }\n.sc-summary__text { font-size: 15px; font-weight: 600; line-height: 1.5; }\n.sc-summary__sub { font-size: 13px; font-weight: 400; opacity: 0.8; margin-top: 2px; }\n\n\/* Schema \u5361\u7247 *\/\n.sc-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; margin-bottom: 20px; }\n.sc-item { padding: 16px; border-radius: var(--geo-radius-md); border: 1px solid var(--geo-border); background: #fff; transition: transform 0.15s var(--geo-ease); }\n.sc-item:hover { transform: translateY(-1px); box-shadow: var(--geo-shadow-md); }\n.sc-item--found { border-left: 4px solid var(--geo-success); }\n.sc-item--missing { border-left: 4px solid var(--geo-border-strong); opacity: 0.85; }\n.sc-item--missing-high { border-left: 4px solid var(--geo-danger); }\n\n.sc-item__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }\n.sc-item__type { font-size: 15px; font-weight: 700; color: var(--geo-text-primary); font-family: var(--geo-font-mono); }\n.sc-item__priority { font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: var(--geo-radius-pill); }\n.sc-pri--high { background: var(--geo-danger-bg); color: #991b1b; }\n.sc-pri--mid { background: var(--geo-warn-bg); color: #92400e; }\n.sc-pri--low { background: var(--geo-bg-page); color: var(--geo-text-muted); }\n\n.sc-item__reason { font-size: 13px; color: var(--geo-text-muted); line-height: 1.5; }\n.sc-item__tip { font-size: 12px; color: var(--geo-primary); margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--geo-border); }\n.sc-item__status { font-size: 12px; font-weight: 700; }\n.sc-item__status--found { color: var(--geo-success); }\n.sc-item__status--missing { color: var(--geo-text-faint); }\n\n\/* Meta \u4fe1\u606f\u5361\u7247 *\/\n.sc-meta { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 20px; }\n.sc-meta-card { padding: 16px; border-radius: var(--geo-radius-md); border: 1px solid var(--geo-border); background: var(--geo-bg-page); }\n.sc-meta-label { font-size: 12px; color: var(--geo-text-faint); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 6px; }\n.sc-meta-value { font-size: 14px; color: var(--geo-text-body); line-height: 1.5; word-break: break-all; }\n.sc-meta-len { font-size: 11px; color: var(--geo-text-faint); margin-top: 4px; }\n\n@media (max-width: 600px) {\n    .sc-grid { grid-template-columns: 1fr; }\n    .sc-meta { grid-template-columns: 1fr; }\n    .sc-summary { flex-direction: column; text-align: center; }\n}\n<\/style>\n\n<div class=\"geo-card\">\n    <div class=\"geo-hero\">\n        <h2 class=\"geo-hero__title\">\ud83c\udfd7\ufe0f Schema Markup Check<\/h2>\n        <p class=\"geo-hero__desc\">Inspect JSON-LD \/ Microdata markup, evaluate AI extractability, and compare against GEO best practices.<\/p>\n    \n<div class=\"geo-about\">\n    <details class=\"geo-about__section\">\n        <summary>\ud83d\udcd6 What does this tool measure?<\/summary>\n        <div class=\"geo-about__body\">\n            <p>Schema markup isn't for visitors \u2014 it's for machines. It tells AI exactly what your content is: an article, a FAQ, a product. This tool audits your Schema deployment and flags missing types by GEO priority.<\/p>\n            <p class=\"geo-about__ref\">See <em>Make AI Speak for You: The Definitive Guide to GEO<\/em>, Ch. 4.8<\/p>\n        <\/div>\n    <\/details>\n    <details class=\"geo-about__section\">\n        <summary>\u2753 FAQ: GEO Impact<\/summary>\n        <div class=\"geo-about__body\">\n            <div class=\"geo-faq-item\"><h4>Which Schema types matter most?<\/h4><p>FAQPage (high) \u2014 Q&A pairs are easiest to extract. Article (high) \u2014 identifies author and date. HowTo (high) \u2014 step-by-step content AI can turn into structured answers.<\/p><\/div>\n            <div class=\"geo-faq-item\"><h4>Can pages without Schema get cited?<\/h4><p>Yes, but Schema gives AI a cleaner extraction path. Deployment cost is low and the upside covers both search and AI.<\/p><\/div>\n            <div class=\"geo-faq-item\"><h4>Fastest way on WordPress?<\/h4><p>Both Yoast SEO and Rank Math have built-in Schema tools. FAQPage and Article can be toggled from the dashboard \u2014 no code needed.<\/p><\/div>\n        <\/div>\n    <\/details>\n<\/div>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Which Schema types matter most?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"FAQPage (high) \u2014 Q&A pairs are easiest to extract. Article (high) \u2014 identifies author and date. HowTo (high) \u2014 step-by-step content AI can turn into structured answers.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Can pages without Schema get cited?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes, but Schema gives AI a cleaner extraction path. Deployment cost is low and the upside covers both search and AI.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Fastest way on WordPress?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Both Yoast SEO and Rank Math have built-in Schema tools. FAQPage and Article can be toggled from the dashboard \u2014 no code needed.\"\n      }\n    }\n  ]\n}\n<\/script>\n\n<\/div>\n\n    <div class=\"geo-action\">\n        <div class=\"geo-input-row\">\n            <input type=\"url\" id=\"sc-url\" class=\"geo-input\" placeholder=\"Enter page URL, e.g. https:\/\/example.com\/product\/123\">\n            <button id=\"sc-btn\" class=\"geo-btn\">Start check<\/button>\n        <\/div>\n    <\/div>\n\n    <div id=\"sc-result\" class=\"geo-result\" style=\"padding: 0 var(--geo-space-xl) var(--geo-space-xl);\"><\/div>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function(){\n    var btn = document.getElementById('sc-btn');\n    var result = document.getElementById('sc-result');\n\n    btn.addEventListener('click', async function(){\n        var url = document.getElementById('sc-url').value.trim();\n        if(!url){ GeoAPI.showError(result, '\u8bf7\u8f93\u5165\u9875\u9762 URL'); return; }\n\n        GeoAPI.disableBtn(btn, GeoAPI.t('btn.detecting'));\n        GeoAPI.showLoading(result, GeoAPI.t('schema.loading'));\n\n        try {\n            var data = await GeoAPI.post('\/geo\/schema-check', { url: url });\n            renderResult(data);\n        } catch(e) {\n            if(!e._geoAuthHandled) GeoAPI.showError(result, e.message);\n        } finally {\n            GeoAPI.enableBtn(btn);\n        }\n    });\n\n    function renderResult(data) {\n        var html = '';\n        var statusIcons = { good:'\u2705', fair:'\ud83d\udccb', weak:'\u26a0\ufe0f', none:'\ud83d\udeab' };\n\n        \/* ---- 1. \u603b\u89c8 ---- *\/\n        html += '<div class=\"sc-summary sc-summary--' + data.overall_status + '\">'\n              + '<div class=\"sc-summary__icon\">' + (statusIcons[data.overall_status]||'\ud83d\udccb') + '<\/div>'\n              + '<div><div class=\"sc-summary__text\">' + GeoAPI.escapeHtml(data.overall_msg) + '<\/div>';\n        if(data.top_suggestion) {\n            html += '<div class=\"sc-summary__sub\">\ud83d\udca1 ' + GeoAPI.escapeHtml(data.top_suggestion) + '<\/div>';\n        }\n        html += '<\/div><\/div>';\n\n        \/* ---- 2. Meta \u4fe1\u606f ---- *\/\n        var mi = data.meta_info || {};\n        html += '<div class=\"geo-section\"><h3 class=\"geo-section__title\">\ud83d\udcdd \u9875\u9762 Meta \u4fe1\u606f<\/h3><\/div>';\n        html += '<div class=\"sc-meta\">';\n        html += '<div class=\"sc-meta-card\"><div class=\"sc-meta-label\">Title<\/div>'\n              + '<div class=\"sc-meta-value\">' + GeoAPI.escapeHtml(mi.title || '\uff08\u672a\u8bbe\u7f6e\uff09') + '<\/div>'\n              + '<div class=\"sc-meta-len\">' + (mi.title_length||0) + ' \u5b57\u7b26' + (mi.title_length > 60 ? ' \u26a0 \u504f\u957f' : mi.title_length < 10 ? ' \u26a0 \u504f\u77ed' : ' \u2713') + '<\/div><\/div>';\n        html += '<div class=\"sc-meta-card\"><div class=\"sc-meta-label\">Meta Description<\/div>'\n              + '<div class=\"sc-meta-value\">' + GeoAPI.escapeHtml(mi.description || '\uff08\u672a\u8bbe\u7f6e\uff09') + '<\/div>'\n              + '<div class=\"sc-meta-len\">' + (mi.description_length||0) + ' \u5b57\u7b26' + (mi.description_length > 160 ? ' \u26a0 \u504f\u957f' : mi.description_length < 50 ? ' \u26a0 \u504f\u77ed' : ' \u2713') + '<\/div><\/div>';\n        html += '<\/div>';\n\n        \/* ---- 3. \u5df2\u68c0\u6d4b\u5230\u7684 Schema\uff08\u63a8\u8350\u5217\u8868\u4e2d\u7684\uff09 ---- *\/\n        if(data.found_recommended && data.found_recommended.length > 0) {\n            html += '<div class=\"geo-section\"><h3 class=\"geo-section__title\">\u2705 \u5df2\u90e8\u7f72\u7684 GEO \u63a8\u8350 Schema<\/h3>'\n                  + '<span class=\"geo-section__desc\">\u8fd9\u4e9b\u6807\u6ce8\u6709\u52a9\u4e8e AI \u9ad8\u6548\u63d0\u53d6\u60a8\u7684\u5185\u5bb9<\/span><\/div>';\n            html += '<div class=\"sc-grid\">';\n            data.found_recommended.forEach(function(s){\n                html += buildSchemaCard(s, true);\n            });\n            html += '<\/div>';\n        }\n\n        \/* \u975e\u63a8\u8350\u4f46\u5b58\u5728\u7684 *\/\n        if(data.other_found && data.other_found.length > 0) {\n            html += '<div style=\"font-size:13px;color:var(--geo-text-muted);margin-bottom:16px;\">\u5176\u4ed6\u5df2\u90e8\u7f72\uff1a'\n                  + data.other_found.map(function(t){ return '<code style=\"background:var(--geo-bg-page);padding:2px 6px;border-radius:3px;font-size:12px;\">' + GeoAPI.escapeHtml(t) + '<\/code>'; }).join(' ')\n                  + '<\/div>';\n        }\n\n        \/* ---- 4. \u7f3a\u5931\u7684\u63a8\u8350 Schema ---- *\/\n        if(data.missing_recommended && data.missing_recommended.length > 0) {\n            html += '<div class=\"geo-section\"><h3 class=\"geo-section__title\">\ud83d\udccb \u5efa\u8bae\u6dfb\u52a0\u7684 Schema<\/h3>'\n                  + '<span class=\"geo-section__desc\">\u6309 GEO \u4f18\u5316\u4f18\u5148\u7ea7\u6392\u5e8f\uff0c\u9ad8\u4f18\u5148\u7ea7\u7c7b\u578b\u5bf9 AI \u5f15\u7528\u7387\u5f71\u54cd\u6700\u5927<\/span><\/div>';\n            html += '<div class=\"sc-grid\">';\n            data.missing_recommended.forEach(function(s){\n                html += buildSchemaCard(s, false);\n            });\n            html += '<\/div>';\n        }\n\n        \/* ---- 5. \u65e0 Schema \u65f6\u7684\u7a7a\u72b6\u6001 ---- *\/\n        if(data.found_count === 0) {\n            html += '<div class=\"geo-empty\" style=\"padding:var(--geo-space-xl);background:var(--geo-bg-page);border-radius:var(--geo-radius-md);margin-bottom:20px;\">'\n                  + '\ud83d\udd0d \u8be5\u9875\u9762\u672a\u68c0\u6d4b\u5230\u4efb\u4f55 Schema \u7ed3\u6784\u5316\u6570\u636e\u6807\u6ce8<br>'\n                  + '<span style=\"font-size:13px;color:var(--geo-text-faint);\">\u5efa\u8bae\u81f3\u5c11\u6dfb\u52a0 Article + FAQPage + Organization \u4e09\u79cd\u57fa\u7840\u6807\u6ce8<\/span><\/div>';\n        }\n\n        GeoAPI.showResult(result, html);\n    }\n\n    function buildSchemaCard(s, isFound) {\n        var priMap = { '\u9ad8':'sc-pri--high', '\u4e2d':'sc-pri--mid', '\u4f4e':'sc-pri--low' };\n        var itemClass = isFound ? 'sc-item--found' : (s.priority === '\u9ad8' ? 'sc-item--missing-high' : 'sc-item--missing');\n        var statusHtml = isFound\n            ? '<span class=\"sc-item__status sc-item__status--found\">\u2713 \u5df2\u90e8\u7f72<\/span>'\n            : '<span class=\"sc-item__status sc-item__status--missing\">\u672a\u68c0\u6d4b\u5230<\/span>';\n\n        var h = '<div class=\"sc-item ' + itemClass + '\">'\n              + '<div class=\"sc-item__head\">'\n              + '<span class=\"sc-item__type\">' + GeoAPI.escapeHtml(s.type) + '<\/span>'\n              + '<span class=\"sc-item__priority ' + (priMap[s.priority]||'') + '\">' + GeoAPI.escapeHtml(s.priority) + '\u4f18\u5148\u7ea7<\/span>'\n              + '<\/div>'\n              + '<div class=\"sc-item__reason\">' + GeoAPI.escapeHtml(s.reason) + '<\/div>';\n        if(!isFound && s.tip) {\n            h += '<div class=\"sc-item__tip\">\ud83d\udca1 ' + GeoAPI.escapeHtml(s.tip) + '<\/div>';\n        }\n        h += '<div style=\"margin-top:8px;\">' + statusHtml + '<\/div><\/div>';\n        return h;\n    }\n});\n<\/script>\n\n        \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":48884,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-48899","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages\/48899","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/comments?post=48899"}],"version-history":[{"count":0,"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages\/48899\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages\/48884"}],"wp:attachment":[{"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/media?parent=48899"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}