Skip to main content

FAQs or Structured Content Included

Issue No: 53

Category: Content & Readability

Issue type: Suggestion

Priority: STANDARD

Description

This audit inspects the raw HTML to detect the presence of schema.org structured data, with a specific focus on FAQPage patterns, evaluating the page's readiness for rich snippets.

How do we capture it

  1. Fetch the target URL using a standard HTTP GET request and retrieve the raw response body.
  2. Scan the raw HTML text for JSON-LD container elements: <script type="application/ld+json">.
  3. For each JSON-LD block found, extract the inner text and attempt to parse it as JSON. If parsing fails, catch the error and record the syntax exception message.
  4. If JSON parsing succeeds, inspect the object(s) or the @graph array for @context matching "https://schema.org" or "http://schema.org". Identify the values of the @type keys. Specifically flag if @type is equal to "FAQPage".
  5. Scan the raw HTML for Microdata attributes. Look for the presence of elements containing the attribute itemscope alongside itemtype containing "schema.org". Extract any types mapped under these attributes.
  6. Scan the raw HTML for RDFa attributes. Identify elements containing vocab="http://schema.org/" or vocab="https://schema.org/" paired with typeof declarations.
  7. Record the total counts of structured data blocks found and populate boolean flags indicating whether valid structured data and/or explicit FAQ schemas were extracted.

Constraint: The XeoPix crawler performs static analysis on raw HTTP response bytes only. Any structured data dynamically injected into the DOM via client-side JavaScript execution (such as Google Tag Manager, client-side SPA frameworks, or post-load scripts) is completely invisible to this crawler and is treated as non-existent.

What to store

FieldTypeComment
has_structured_dataBOOLEANSet to true if any valid JSON-LD, Microdata, or RDFa schema.org markup is parsed from the raw HTML.
has_faq_schemaBOOLEANSet to true if a schema of type 'FAQPage' is explicitly present in the extracted structured data.
structured_data_typesVARCHAR[]Array of distinct schema types found on the page (e.g., ['FAQPage', 'Product', 'WebSite']).
json_ld_countINTEGERThe total count of <script type="application/ld+json"> blocks detected in the document.
microdata_detectedBOOLEANSet to true if schema.org Microdata patterns (itemscope/itemtype) are present in the HTML.
rdfa_detectedBOOLEANSet to true if schema.org RDFa patterns (vocab/typeof) are present in the HTML.
extraction_error_messageVARCHARHolds any syntax error message thrown during JSON-LD parsing; null if no syntax errors occurred.

Condition for trigger

The crawler evaluates the structured data storage metrics against these automated trigger rules to flag missing optimizations or semantic errors:

  • Trigger Rule 1: Missing Structured Content Optimization

    • Target Field: has_structured_data
    • Evaluation Logic: has_structured_data = FALSE
    • Severity: SUGGESTION
    • Diagnostic Message: "No structured data or FAQ schema found on the page. Adding schema.org markup can qualify this page for rich snippets."
  • Trigger Rule 2: Malformed JSON-LD Block

    • Target Field: extraction_error_message
    • Evaluation Logic: extraction_error_message IS NOT NULL
    • Severity: WARNING
    • Diagnostic Message: "Structured data extraction failed due to syntax or parsing errors. Check your JSON-LD block syntax."

Sources

Long description

Structured data serves as an explicit translation layer between human-readable web content and search engine crawlers. By wrapping content (such as Frequently Asked Questions) in structured data types like FAQPage, search engines can accurately comprehend the relationship between a question and its answer.

When Google or other major search engines successfully parse an FAQPage schema block, they are able to render interactive dropdown FAQ menus directly on the Search Engine Results Page (SERP). This provides valuable virtual real estate, captures user intent early, and dramatically increases the organic click-through rate (CTR).

Common failure modes checked by the crawler:

  • Syntax Errors: Missing closing brackets, unescaped double quotes, or trailing commas within a <script type="application/ld+json"> block, which completely breaks parser execution.
  • Mismatched Types: Claiming an item is a Question without providing an associated Answer object in the hierarchical schema.
  • Client-side Rendering Dependancy: Serving a blank server-side HTML response where JSON-LD templates are rendered exclusively on the client side, causing static scrapers to see nothing.

Example Valid FAQ Schema Structure (JSON-LD)

+-------------------------------------------------------------+
| { |
| "@context": "https://schema.org", |
| "@type": "FAQPage", |
| "mainEntity": [{ |
| "@type": "Question", |
| "name": "What is XeoPix?", |
| "acceptedAnswer": { |
| "@type": "Answer", |
| "text": "XeoPix is an automated crawler..." |
| } |
| }] |
| } |
+-------------------------------------------------------------+

How to Fix

  1. Group at least two contextually relevant question-and-answer pairs that are visible to users on the page.
  2. Generate valid schema.org markup for these elements. JSON-LD is the format recommended by major search engines.
  3. Inject the JSON-LD snippet as a <script type="application/ld+json"> tag directly into the server-rendered HTML payload (ideally inside the <head> or at the bottom of the <body>).
  4. Ensure all string values in the JSON block are properly escaped and that trailing commas are removed to avoid syntax exceptions.
  5. Verify that the written content matching the schema definitions is fully visible to the user on the actual page layout to comply with search quality guidelines.