{
    "slug": "schema",
    "name": "schema",
    "description": "When the user wants to add, fix, or optimize schema markup and structured data on their site. Also use when the user mentions \"schema markup,\" \"structured data,\" \"JSON-LD,\" \"rich snippets,\" \"schema.org,\" \"FAQ schema,\" \"product schema,\" \"review schema,\" \"breadcrumb schema,\" \"Google rich results,\" \"knowledge panel,\" \"star ratings in search,\" or \"add structured data.\" Use this whenever someone wants their pages to show enhanced results in Google. For broader SEO issues, see seo-audit. For AI search optimization, see ai-seo.",
    "frontmatter": {
        "name": "schema",
        "description": "When the user wants to add, fix, or optimize schema markup and structured data on their site. Also use when the user mentions \"schema markup,\" \"structured data,\" \"JSON-LD,\" \"rich snippets,\" \"schema.org,\" \"FAQ schema,\" \"product schema,\" \"review schema,\" \"breadcrumb schema,\" \"Google rich results,\" \"knowledge panel,\" \"star ratings in search,\" or \"add structured data.\" Use this whenever someone wants their pages to show enhanced results in Google. For broader SEO issues, see seo-audit. For AI search optimization, see ai-seo.",
        "metadata": "",
        "version": "2.0.2"
    },
    "body": "# Schema Markup\n\nYou are an expert in structured data and schema markup. Your goal is to implement schema.org markup that helps search engines understand content and enables rich results in search.\n\n## Initial Assessment\n\n**Check for product marketing context first:**\nIf `.agents/product-marketing.md` exists (or `.claude/product-marketing.md`, or the legacy `product-marketing-context.md` filename, in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.\n\nBefore implementing schema, understand:\n\n1. **Page Type** - What kind of page? What's the primary content? What rich results are possible?\n\n2. **Current State** - Any existing schema? Errors in implementation? Which rich results already appearing?\n\n3. **Goals** - Which rich results are you targeting? What's the business value?\n\n---\n\n## Core Principles\n\n### 1. Accuracy First\n- Schema must accurately represent page content\n- Don't markup content that doesn't exist\n- Keep updated when content changes\n\n### 2. Use JSON-LD\n- Google recommends JSON-LD format\n- Easier to implement and maintain\n- Place in `<head>` or end of `<body>`\n\n### 3. Follow Google's Guidelines\n- Only use markup Google supports\n- Avoid spam tactics\n- Review eligibility requirements\n\n### 4. Validate Everything\n- Test before deploying\n- Monitor Search Console\n- Fix errors promptly\n\n---\n\n## Common Schema Types\n\n| Type | Use For | Required Properties |\n|------|---------|-------------------|\n| Organization | Company homepage/about | name, url |\n| WebSite | Homepage/site identity | name, url |\n| Article | Blog posts, news | headline, image, datePublished, author |\n| Product | Product pages | name, image, offers |\n| SoftwareApplication | SaaS/app pages | name, offers |\n| FAQPage | FAQ content | mainEntity (Q&A array) |\n| HowTo | Tutorials | name, step |\n| BreadcrumbList | Any page with breadcrumbs | itemListElement |\n| LocalBusiness | Local business pages | name, address |\n| Event | Events, webinars | name, startDate, location |\n\n**For complete JSON-LD examples**: See [references/schema-examples.md](references/schema-examples.md)\n\n### Check Google Feature Support First\n\nSchema.org vocabulary validity does not establish Google feature eligibility. Before implementing markup for a requested search appearance, check Google's current [supported structured data gallery](https://developers.google.com/search/docs/appearance/structured-data/search-gallery).\n\n- **FAQPage:** Google stopped showing FAQ rich results on May 7, 2026, and removed the feature's documentation in June. The earlier government/health-site exception is no longer a route to FAQ rich results. See Google's [documentation updates](https://developers.google.com/search/updates).\n- **HowTo:** Google retired HowTo rich results in September 2023. See the [retirement announcement](https://developers.google.com/search/blog/2023/08/howto-faq-changes).\n- **WebSite / SearchAction:** Google retired the sitelinks search box in November 2024; `WebSite` still supports site names. See the [search box announcement](https://developers.google.com/search/blog/2024/10/sitelinks-search-box).\n\nThese types can still describe matching visible content in Schema.org. Explain that distinction, ask which consumer needs the markup, and do not recommend implementation to obtain a retired Google appearance. Do not treat missing retired-feature reports or Rich Results Test detection as a broken implementation, or remove unrelated supported markup.\n\n---\n\n## Quick Reference\n\n### Organization (Company Page)\nRequired: name, url\nRecommended: logo, sameAs (social profiles), contactPoint\n\n### Article/BlogPosting\nRequired: headline, image, datePublished, author\nRecommended: dateModified, publisher, description\n\n### Product\nRequired: name, image, offers (price + availability)\nRecommended: sku, brand, aggregateRating, review\n\n### FAQPage\nRequired: mainEntity (array of Question/Answer pairs)\nOptional semantic markup for visible FAQs; not a way to obtain Google FAQ rich results. Check the feature-support guidance above before offering code.\n\n### BreadcrumbList\nRequired: itemListElement (array with position, name, item)\n\n---\n\n## Multiple Schema Types\n\nYou can combine multiple schema types on one page using `@graph`:\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@graph\": [\n    { \"@type\": \"Organization\", ... },\n    { \"@type\": \"WebSite\", ... },\n    { \"@type\": \"BreadcrumbList\", ... }\n  ]\n}\n```\n\n---\n\n## Validation and Testing\n\n### Tools\n- **Google Rich Results Test**: https://search.google.com/test/rich-results — test Google's currently supported features, not every Schema.org type\n- **Schema.org Validator**: https://validator.schema.org/\n- **Search Console**: available enhancement reports for supported features; retired types need not have a report\n\n### Common Errors\n\n**Missing required properties** - Check Google's documentation for required fields\n\n**Invalid values** - Dates must be ISO 8601, URLs fully qualified, enumerations exact\n\n**Mismatch with page content** - Schema doesn't match visible content\n\n---\n\n## Implementation\n\n### Static Sites\n- Add JSON-LD directly in HTML template\n- Use includes/partials for reusable schema\n\n### Dynamic Sites (React, Next.js)\n- Component that renders schema\n- Server-side rendered for SEO\n- Serialize data to JSON-LD\n\n### CMS / WordPress\n- Plugins (Yoast, Rank Math, Schema Pro)\n- Theme modifications\n- Custom fields to structured data\n\n---\n\n## Output Format\n\n### Schema Implementation\n```json\n// Full JSON-LD code block\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"...\",\n  // Complete markup\n}\n```\n\n### Testing Checklist\n- [ ] Requested Google appearance is currently supported, or a separate semantic consumer is identified\n- [ ] Validates in Schema.org Validator; supported Google features also pass Rich Results Test\n- [ ] Required-field errors resolved; recommended-field warnings reviewed\n- [ ] Matches page content\n- [ ] All required properties included\n\n---\n\n## Task-Specific Questions\n\n1. What type of page is this?\n2. What rich results are you hoping to achieve?\n3. What data is available to populate the schema?\n4. Is there existing schema on the page?\n5. What's your tech stack?\n\n---\n\n## Related Skills\n\n- **seo-audit**: For overall SEO including schema review\n- **ai-seo**: For AI search optimization (schema helps AI understand content)\n- **programmatic-seo**: For templated schema at scale\n- **site-architecture**: For breadcrumb structure and navigation schema planning\n",
    "references": {
        "schema-examples.md": {
            "name": "Schema Examples",
            "path": "schema-examples.md",
            "content": "# Schema Markup Examples\n\nComplete JSON-LD examples for common schema types.\n\n## Contents\n- Organization\n- WebSite (site identity)\n- Article / BlogPosting\n- Product\n- SoftwareApplication\n- FAQPage\n- HowTo\n- BreadcrumbList\n- LocalBusiness\n- Event\n- Multiple Schema Types\n- Implementation Example (Next.js)\n\n## Organization\n\nFor company/brand homepage or about page.\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"name\": \"Example Company\",\n  \"url\": \"https://example.com\",\n  \"logo\": \"https://example.com/logo.png\",\n  \"sameAs\": [\n    \"https://twitter.com/example\",\n    \"https://linkedin.com/company/example\",\n    \"https://facebook.com/example\"\n  ],\n  \"contactPoint\": {\n    \"@type\": \"ContactPoint\",\n    \"telephone\": \"+1-555-555-5555\",\n    \"contactType\": \"customer service\"\n  }\n}\n```\n\n---\n\n## WebSite (site identity)\n\nFor homepage/site identity. Google retired the sitelinks search box in November 2024; adding `SearchAction` cannot restore it. Keep useful `WebSite` markup for site names. See the [search box announcement](https://developers.google.com/search/blog/2024/10/sitelinks-search-box).\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"WebSite\",\n  \"name\": \"Example\",\n  \"url\": \"https://example.com\"\n}\n```\n\n---\n\n## Article / BlogPosting\n\nFor blog posts and news articles.\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Article\",\n  \"headline\": \"How to Implement Schema Markup\",\n  \"image\": \"https://example.com/image.jpg\",\n  \"datePublished\": \"2024-01-15T08:00:00+00:00\",\n  \"dateModified\": \"2024-01-20T10:00:00+00:00\",\n  \"author\": {\n    \"@type\": \"Person\",\n    \"name\": \"Jane Doe\",\n    \"url\": \"https://example.com/authors/jane\"\n  },\n  \"publisher\": {\n    \"@type\": \"Organization\",\n    \"name\": \"Example Company\",\n    \"logo\": {\n      \"@type\": \"ImageObject\",\n      \"url\": \"https://example.com/logo.png\"\n    }\n  },\n  \"description\": \"A complete guide to implementing schema markup...\",\n  \"mainEntityOfPage\": {\n    \"@type\": \"WebPage\",\n    \"@id\": \"https://example.com/schema-guide\"\n  }\n}\n```\n\n---\n\n## Product\n\nFor product pages (e-commerce or SaaS).\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Product\",\n  \"name\": \"Premium Widget\",\n  \"image\": \"https://example.com/widget.jpg\",\n  \"description\": \"Our best-selling widget for professionals\",\n  \"sku\": \"WIDGET-001\",\n  \"brand\": {\n    \"@type\": \"Brand\",\n    \"name\": \"Example Co\"\n  },\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"url\": \"https://example.com/products/widget\",\n    \"priceCurrency\": \"USD\",\n    \"price\": \"99.99\",\n    \"availability\": \"https://schema.org/InStock\",\n    \"priceValidUntil\": \"2024-12-31\"\n  },\n  \"aggregateRating\": {\n    \"@type\": \"AggregateRating\",\n    \"ratingValue\": \"4.8\",\n    \"reviewCount\": \"127\"\n  }\n}\n```\n\n---\n\n## SoftwareApplication\n\nFor SaaS product pages and app landing pages.\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"SoftwareApplication\",\n  \"name\": \"Example App\",\n  \"applicationCategory\": \"BusinessApplication\",\n  \"operatingSystem\": \"Web, iOS, Android\",\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"price\": \"0\",\n    \"priceCurrency\": \"USD\"\n  },\n  \"aggregateRating\": {\n    \"@type\": \"AggregateRating\",\n    \"ratingValue\": \"4.6\",\n    \"ratingCount\": \"1250\"\n  }\n}\n```\n\n---\n\n## FAQPage\n\nFor visible frequently asked questions when a consumer needs Schema.org semantics. Google FAQ rich results were retired in May 2026; this example cannot enable expandable Google search results. Use the Schema.org Validator for vocabulary validation, not missing Rich Results Test detection as a failure. See [Google's documentation updates](https://developers.google.com/search/updates).\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is schema markup?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Schema markup is a structured data vocabulary that helps search engines understand your content...\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How do I implement schema?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The recommended approach is to use JSON-LD format, placing the script in your page's head...\"\n      }\n    }\n  ]\n}\n```\n\n---\n\n## HowTo\n\nFor instructional content and tutorials when a consumer needs Schema.org semantics. Google retired HowTo rich results in September 2023; this example does not restore that appearance. See the [retirement announcement](https://developers.google.com/search/blog/2023/08/howto-faq-changes).\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"HowTo\",\n  \"name\": \"How to Add Schema Markup to Your Website\",\n  \"description\": \"A step-by-step guide to implementing JSON-LD schema\",\n  \"totalTime\": \"PT15M\",\n  \"step\": [\n    {\n      \"@type\": \"HowToStep\",\n      \"name\": \"Choose your schema type\",\n      \"text\": \"Identify the appropriate schema type for your page content...\",\n      \"url\": \"https://example.com/guide#step1\"\n    },\n    {\n      \"@type\": \"HowToStep\",\n      \"name\": \"Write the JSON-LD\",\n      \"text\": \"Create the JSON-LD markup following schema.org specifications...\",\n      \"url\": \"https://example.com/guide#step2\"\n    },\n    {\n      \"@type\": \"HowToStep\",\n      \"name\": \"Add to your page\",\n      \"text\": \"Insert the script tag in your page's head section...\",\n      \"url\": \"https://example.com/guide#step3\"\n    }\n  ]\n}\n```\n\n---\n\n## BreadcrumbList\n\nFor any page with breadcrumb navigation.\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 1,\n      \"name\": \"Home\",\n      \"item\": \"https://example.com\"\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 2,\n      \"name\": \"Blog\",\n      \"item\": \"https://example.com/blog\"\n    },\n    {\n      \"@type\": \"ListItem\",\n      \"position\": 3,\n      \"name\": \"SEO Guide\",\n      \"item\": \"https://example.com/blog/seo-guide\"\n    }\n  ]\n}\n```\n\n---\n\n## LocalBusiness\n\nFor local business location pages.\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"LocalBusiness\",\n  \"name\": \"Example Coffee Shop\",\n  \"image\": \"https://example.com/shop.jpg\",\n  \"address\": {\n    \"@type\": \"PostalAddress\",\n    \"streetAddress\": \"123 Main Street\",\n    \"addressLocality\": \"San Francisco\",\n    \"addressRegion\": \"CA\",\n    \"postalCode\": \"94102\",\n    \"addressCountry\": \"US\"\n  },\n  \"geo\": {\n    \"@type\": \"GeoCoordinates\",\n    \"latitude\": \"37.7749\",\n    \"longitude\": \"-122.4194\"\n  },\n  \"telephone\": \"+1-555-555-5555\",\n  \"openingHoursSpecification\": [\n    {\n      \"@type\": \"OpeningHoursSpecification\",\n      \"dayOfWeek\": [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\"],\n      \"opens\": \"08:00\",\n      \"closes\": \"18:00\"\n    }\n  ],\n  \"priceRange\": \"$$\"\n}\n```\n\n---\n\n## Event\n\nFor event pages, webinars, conferences.\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Event\",\n  \"name\": \"Annual Marketing Conference\",\n  \"startDate\": \"2024-06-15T09:00:00-07:00\",\n  \"endDate\": \"2024-06-15T17:00:00-07:00\",\n  \"eventAttendanceMode\": \"https://schema.org/OnlineEventAttendanceMode\",\n  \"eventStatus\": \"https://schema.org/EventScheduled\",\n  \"location\": {\n    \"@type\": \"VirtualLocation\",\n    \"url\": \"https://example.com/conference\"\n  },\n  \"image\": \"https://example.com/conference.jpg\",\n  \"description\": \"Join us for our annual marketing conference...\",\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"url\": \"https://example.com/conference/tickets\",\n    \"price\": \"199\",\n    \"priceCurrency\": \"USD\",\n    \"availability\": \"https://schema.org/InStock\",\n    \"validFrom\": \"2024-01-01\"\n  },\n  \"performer\": {\n    \"@type\": \"Organization\",\n    \"name\": \"Example Company\"\n  },\n  \"organizer\": {\n    \"@type\": \"Organization\",\n    \"name\": \"Example Company\",\n    \"url\": \"https://example.com\"\n  }\n}\n```\n\n---\n\n## Multiple Schema Types\n\nCombine multiple schema types using @graph.\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"Organization\",\n      \"@id\": \"https://example.com/#organization\",\n      \"name\": \"Example Company\",\n      \"url\": \"https://example.com\"\n    },\n    {\n      \"@type\": \"WebSite\",\n      \"@id\": \"https://example.com/#website\",\n      \"url\": \"https://example.com\",\n      \"name\": \"Example\",\n      \"publisher\": {\n        \"@id\": \"https://example.com/#organization\"\n      }\n    },\n    {\n      \"@type\": \"BreadcrumbList\",\n      \"itemListElement\": [...]\n    }\n  ]\n}\n```\n\n---\n\n## Implementation Example (Next.js)\n\n```jsx\nexport default function ProductPage({ product }) {\n  const schema = {\n    \"@context\": \"https://schema.org\",\n    \"@type\": \"Product\",\n    name: product.name,\n    // ... other properties\n  };\n\n  return (\n    <>\n      <Head>\n        <script\n          type=\"application/ld+json\"\n          dangerouslySetInnerHTML={{ __html: JSON.stringify(schema).replace(/</g, '\\\\u003c') }}\n        />\n      </Head>\n      {/* Page content */}\n    </>\n  );\n}\n```\n\nWhen JSON-LD is inserted as raw HTML, JSON escaping alone does not stop a product string containing a script-closing tag from terminating the element. Escape every `<` in the serialized JSON as `\\u003c`, as in the example above; parsing the JSON recovers the original product text. Do this at the HTML embedding boundary, without deleting legitimate characters from the source data. See the [Next.js JSON-LD guide](https://nextjs.org/docs/app/guides/json-ld).\n"
        }
    },
    "evals": {
        "skill_name": "schema",
        "evals": [
            {
                "id": 1,
                "prompt": "Add schema markup to our SaaS product's homepage. We're a project management tool called TaskFlow. We need Organization schema and any other relevant types.",
                "expected_output": "Should check for product-marketing.md first. Should implement Organization schema in JSON-LD format with all required and recommended properties (name, url, logo, description, sameAs for social profiles). Should recommend additional schema types for a SaaS homepage: WebSite (with SearchAction if applicable), SoftwareApplication or Product. Should use @graph for multiple schema types on one page. Should provide the complete JSON-LD code ready to implement. Should recommend validation with Google's Rich Results Test and Schema.org validator.",
                "assertions": [
                    "Checks for product-marketing.md",
                    "Implements Organization schema in JSON-LD",
                    "Includes required and recommended properties",
                    "Recommends additional relevant schema types",
                    "Uses @graph for multiple types",
                    "Provides complete JSON-LD code",
                    "Recommends validation tools"
                ],
                "files": []
            },
            {
                "id": 2,
                "prompt": "We have a FAQ page with 20 questions about our product. How do I add FAQ schema to get the rich results in Google?",
                "expected_output": "Should implement FAQPage schema in JSON-LD format. Should show the correct structure: FAQPage as mainEntity containing Question items, each with acceptedAnswer. Should provide a complete code example with 2-3 sample questions. Should explain that FAQ schema can enable rich results showing questions/answers directly in search. Should note Google's guidelines for FAQ schema (factual answers, not promotional). Should recommend validation approach.",
                "assertions": [
                    "Implements FAQPage schema in JSON-LD",
                    "Shows correct nested structure (FAQPage > Question > Answer)",
                    "Provides complete code example",
                    "Explains rich result benefits",
                    "Notes Google's FAQ schema guidelines",
                    "Recommends validation"
                ],
                "files": []
            },
            {
                "id": 3,
                "prompt": "add schema to our blog posts. we publish articles about marketing tips.",
                "expected_output": "Should trigger on casual phrasing. Should implement Article (or BlogPosting) schema in JSON-LD. Should include required properties: headline, author (as Person with name and url), datePublished, dateModified, image, publisher (as Organization). Should recommend BreadcrumbList schema alongside the article schema. Should provide template code that can be reused across blog posts. Should address how to populate dynamic fields (date, author, headline) from the CMS.",
                "assertions": [
                    "Triggers on casual phrasing",
                    "Implements Article or BlogPosting schema",
                    "Includes author, datePublished, image, publisher",
                    "Recommends BreadcrumbList alongside",
                    "Provides reusable template code",
                    "Addresses CMS integration for dynamic fields"
                ],
                "files": []
            },
            {
                "id": 4,
                "prompt": "We're an e-commerce site selling physical products. What schema markup do we need for our product pages?",
                "expected_output": "Should implement Product schema with full properties: name, description, image, brand, sku, offers (with price, priceCurrency, availability, url). Should recommend AggregateRating if they have reviews, and Review schema for individual reviews. Should include BreadcrumbList for navigation. Should address common e-commerce schema types: Product, Offer, AggregateRating, Review. Should provide complete JSON-LD code. Should note that Product schema can enable rich results (price, availability, ratings in search).",
                "assertions": [
                    "Implements Product schema with full properties",
                    "Includes Offer with price, availability",
                    "Recommends AggregateRating and Review schema",
                    "Includes BreadcrumbList",
                    "Provides complete JSON-LD code",
                    "Notes rich result benefits for products"
                ],
                "files": []
            },
            {
                "id": 5,
                "prompt": "We added schema markup to our site but it's not showing rich results in Google. Can you help debug?",
                "expected_output": "Should provide a systematic debugging approach: first validate with Google Rich Results Test and Schema.org validator (syntax errors), then check for common issues (incorrect nesting, missing required properties, JSON-LD placement errors). Should explain that valid schema doesn't guarantee rich results — Google chooses when to show them. Should recommend checking Search Console for structured data reports and errors. Should address common debugging scenarios: schema not detected, warnings vs errors, eligible vs displayed.",
                "assertions": [
                    "Recommends validation tools for debugging",
                    "Checks for common schema errors",
                    "Explains valid schema doesn't guarantee rich results",
                    "Recommends Search Console structured data reports",
                    "Addresses warnings vs errors distinction",
                    "Provides systematic debugging approach"
                ],
                "files": []
            },
            {
                "id": 6,
                "prompt": "Our organic search traffic dropped after a site redesign. Can you do a technical SEO audit?",
                "expected_output": "Should recognize this is a technical SEO audit request, not a schema markup task. Should defer to or cross-reference the seo-audit skill, which handles comprehensive technical SEO audits. Schema markup is one component of SEO but doesn't address the broader technical issues (redirects, crawlability, indexation) that likely caused the traffic drop.",
                "assertions": [
                    "Recognizes this as a technical SEO audit request",
                    "References or defers to seo-audit skill",
                    "Does not attempt full SEO audit using schema markup patterns"
                ],
                "files": []
            },
            {
                "id": 7,
                "prompt": "Our Next.js product page embeds JSON-LD with dangerouslySetInnerHTML and JSON.stringify(schema). Product names come from a CMS and can contain HTML, quotes, ampersands and Unicode. How do we keep product text intact without allowing it to terminate the JSON-LD script element?",
                "expected_output": "Should use the schema implementation example and escape the serialized JSON for its HTML script context by replacing every less-than character with a literal JSON Unicode escape before assigning __html. Should explain that JSON.stringify alone does not protect the HTML parser boundary, preserve the original product text when JSON is parsed, and avoid deleting content, HTML-entity escaping JSON or directly interpolating raw names. Should refer to the current official Next.js guidance.",
                "assertions": [
                    "Identifies the script element HTML parsing boundary",
                    "Escapes every less-than character after JSON serialization",
                    "Preserves original product text after JSON.parse",
                    "Does not treat JSON.stringify alone as safe HTML embedding",
                    "Uses the linked Next.js guidance"
                ],
                "files": []
            },
            {
                "id": 8,
                "prompt": "It's October 2026. Our product FAQ has 20 questions. Add FAQ schema so Google shows expandable questions in our search result, and tell us how to validate that feature.",
                "expected_output": "Should explain before offering implementation that Google stopped showing FAQ rich results in May 2026, citing Google's current documentation updates. The earlier government/health exception does not apply now. Should separate Schema.org vocabulary validity from Google feature eligibility. If semantic FAQPage markup is still wanted for another consumer, ask for the actual visible questions and answers and use mainEntity > Question > acceptedAnswer; don't invent product answers. Recommend Schema.org Validator for vocabulary. Missing FAQ detection or reports in Rich Results Test or Search Console is not an implementation defect. Do not promise expandable results or tell the user to delete unrelated supported markup.",
                "assertions": [
                    "Explains Google FAQ rich results were retired before proposing code",
                    "Cites current official Google feature guidance",
                    "Does not present the old government/health exception as current eligibility",
                    "Separates Schema.org validity from Google feature eligibility",
                    "Offers semantic markup only with a separate purpose and actual visible content",
                    "Does not treat missing retired-feature detection/reporting as a defect",
                    "Does not promise the requested retired search appearance"
                ],
                "files": []
            },
            {
                "id": 9,
                "prompt": "Our tutorial uses valid HowTo JSON-LD but the Rich Results Test does not detect it. Should we fix the syntax until Google shows tutorial steps? Also, our homepage lost its sitelinks search box; should we delete all WebSite markup?",
                "expected_output": "Should check current feature support and explain Google's HowTo and sitelinks search box retirements with official references. Valid vocabulary cannot restore those appearances. Use Schema.org Validator if there is a semantic consumer; do not diagnose missing retired-feature detection as a syntax failure. Preserve useful WebSite site-name markup and unrelated supported features. Separate remaining syntax/content issues from feature availability.",
                "assertions": [
                    "Recognizes retired HowTo and sitelinks search box features",
                    "Separates syntax errors from unavailable appearances",
                    "Keeps WebSite site identity and unrelated supported markup",
                    "Uses official feature-support sources and appropriate validators"
                ],
                "files": []
            }
        ]
    },
    "exported_at": "2026-10-12T10:27:10+02:00"
}