Skip to main content
< All Topics
Print

ClaimReview Schema Integration

name: claimreview-schema-integration

description: Implement ClaimReview structured data (schema.org) for fact-checking content. JSON-LD generation, Google Fact Check Tools API integration, ClaimReview markup best practices, Google Search Console verification. Use when adding ClaimReview schema to fact-check articles, integrating with Google Fact Check Tools API, or publishing structured fact-check content for search engine consumption.

ClaimReview Schema Integration

Instructions

Implement ClaimReview structured data markup for fact-checking content. ClaimReview is the schema.org standard that enables search engines and AI systems to identify, index, and surface fact-check results in search results, knowledge panels, and AI answers.

ClaimReview Schema Structure

Required Properties


{
  "@context": "https://schema.org",
  "@type": "ClaimReview",
  "url": "https://example.com/fact-check/claim-title",
  "claimReviewed": "The exact claim being fact-checked, quoted verbatim",
  "author": {
    "@type": "Organization",
    "name": "Fact-Checking Organization Name",
    "url": "https://example.com"
  },
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": 1,
    "bestRating": 5,
    "worstRating": 1,
    "alternateName": "False"
  },
  "itemReviewed": {
    "@type": "Claim",
    "author": {
      "@type": "Person",
      "name": "Person who made the claim"
    },
    "datePublished": "2026-04-10",
    "appearance": {
      "@type": "OpinionNewsArticle",
      "url": "https://source-where-claim-appeared.com/article"
    }
  },
  "datePublished": "2026-04-14"
}

Rating Scale Standards

Define a consistent rating scale and map it to ratingValue:

Rating Name ratingValue Description
True 5 Claim is accurate
Mostly True 4 Claim is largely accurate with minor issues
Mixed 3 Claim contains both accurate and inaccurate elements
Mostly False 2 Claim is largely inaccurate
False 1 Claim is inaccurate

Additional optional ratings to consider:

  • Unverifiable: Claim cannot be verified with available evidence
  • Misleading: Technically accurate but presented in a deceptive context
  • Out of Context: Claim is accurate in isolation but misrepresents the source
  • Satire: Claim originates from satirical content

Map these to the 1-5 scale consistently. Document the mapping in your editorial guidelines.

Optional but Recommended Properties


{
  "reviewBody": "Summary of the fact-check findings (2-3 sentences)",
  "dateModified": "2026-04-14",
  "itemReviewed": {
    "@type": "Claim",
    "author": {
      "@type": "Person",
      "name": "Claim Author",
      "jobTitle": "Title/Role",
      "sameAs": "https://profile-url"
    },
    "datePublished": "2026-04-10",
    "appearance": [
      {
        "@type": "OpinionNewsArticle",
        "url": "https://first-appearance.com/article",
        "headline": "Article headline",
        "datePublished": "2026-04-10"
      }
    ],
    "firstAppearance": {
      "@type": "OpinionNewsArticle",
      "url": "https://original-source.com/article"
    }
  }
}

Google Fact Check Tools API Integration

Claim Search API

Search existing fact-checks across all publishers:


GET https://factchecktools.googleapis.com/v1alpha1/claims:search
  ?query={search_query}
  &languageCode=en
  &key={API_KEY}

Response structure:


{
  "claims": [
    {
      "text": "claim text",
      "claimant": "who said it",
      "claimReview": [
        {
          "publisher": { "name": "", "site": "" },
          "url": "",
          "title": "",
          "reviewDate": "",
          "textualRating": "",
          "languageCode": "en"
        }
      ]
    }
  ]
}

Use the Claim Search API to:

  • Check if a claim has already been fact-checked by others
  • Avoid duplicate fact-checking effort
  • Cross-reference your rating with other organizations’ findings

Claim Markup API

Submit your ClaimReview markup for indexing:


POST https://factchecktools.googleapis.com/v1alpha1/pages
  ?key={API_KEY}

{
  "pageUrl": "https://your-site.com/fact-check/article",
  "claimReviewMarkups": [
    {
      "url": "https://your-site.com/fact-check/article",
      "claimReviewed": "The claim text",
      "claimDate": "2026-04-10",
      "claimFirstAppearance": "https://source-url.com",
      "claimAuthor": { "name": "Claim Author" },
      "rating": {
        "textualRating": "False",
        "ratingValue": 1,
        "worstRating": 1,
        "bestRating": 5
      }
    }
  ]
}

WordPress Implementation

PHP Function for ClaimReview Injection


function render_claimreview_schema( $post_id ) {
    $claim      = get_post_meta( $post_id, '_claimreview_claim', true );
    $rating     = get_post_meta( $post_id, '_claimreview_rating', true );
    $claimant   = get_post_meta( $post_id, '_claimreview_claimant', true );
    $claim_date = get_post_meta( $post_id, '_claimreview_claim_date', true );
    $claim_url  = get_post_meta( $post_id, '_claimreview_claim_url', true );

    if ( empty( $claim ) || empty( $rating ) ) {
        return;
    }

    $rating_map = [
        'true'         => [ 'value' => 5, 'name' => 'True' ],
        'mostly-true'  => [ 'value' => 4, 'name' => 'Mostly True' ],
        'mixed'        => [ 'value' => 3, 'name' => 'Mixed' ],
        'mostly-false' => [ 'value' => 2, 'name' => 'Mostly False' ],
        'false'        => [ 'value' => 1, 'name' => 'False' ],
    ];

    $r = $rating_map[ $rating ] ?? $rating_map['mixed'];

    $schema = [
        '@context'       => 'https://schema.org',
        '@type'          => 'ClaimReview',
        'url'            => get_permalink( $post_id ),
        'claimReviewed'  => $claim,
        'author'         => [
            '@type' => 'Organization',
            'name'  => get_bloginfo( 'name' ),
            'url'   => home_url(),
        ],
        'reviewRating'   => [
            '@type'         => 'Rating',
            'ratingValue'   => $r['value'],
            'bestRating'    => 5,
            'worstRating'   => 1,
            'alternateName' => $r['name'],
        ],
        'itemReviewed'   => [
            '@type'         => 'Claim',
            'author'        => [ '@type' => 'Person', 'name' => $claimant ],
            'datePublished' => $claim_date,
        ],
        'datePublished'  => get_the_date( 'c', $post_id ),
    ];

    if ( ! empty( $claim_url ) ) {
        $schema['itemReviewed']['appearance'] = [
            '@type' => 'OpinionNewsArticle',
            'url'   => $claim_url,
        ];
    }

    echo '<script type="application/ld+json">' . wp_json_encode( $schema, JSON_UNESCAPED_SLASHES ) . '</script>';
}
add_action( 'wp_head', function() {
    if ( is_singular( 'fact-check' ) ) {
        render_claimreview_schema( get_the_ID() );
    }
});

Validation and Verification

Pre-Publication Checklist

  • [ ] claimReviewed contains the exact verbatim claim (not paraphrased)
  • [ ] author identifies the fact-checking organization with URL
  • [ ] reviewRating uses the correct scale (1-5) with alternateName
  • [ ] itemReviewed.author identifies who made the claim
  • [ ] datePublished is in ISO 8601 format
  • [ ] JSON-LD syntax is valid (test with JSON validator)
  • [ ] Schema validates in Google Rich Results Test
  • [ ] Page is accessible to Googlebot (not blocked by robots.txt)

Google Search Console Verification

  1. Submit the fact-check URL in Search Console’s URL Inspection tool
  2. Verify “ClaimReview” appears in detected structured data
  3. Check for errors or warnings in the Enhancement report
  4. Monitor the “Fact check” section in Search Console Enhancements
  5. Track indexing status and rich result appearances

Multiple Claims per Article

When a single article fact-checks multiple claims, use an array:


[
  { "@context": "https://schema.org", "@type": "ClaimReview", "claimReviewed": "Claim 1", ... },
  { "@context": "https://schema.org", "@type": "ClaimReview", "claimReviewed": "Claim 2", ... }
]

Each claim must be independently rated and sourced.

Inputs Required

  • The exact claim being fact-checked (verbatim)
  • Who made the claim (person or organization)
  • When and where the claim was made (date, source URL)
  • Fact-check verdict (rating on the defined scale)
  • Fact-check article URL
  • Fact-checking organization name and URL
  • Google Fact Check Tools API key (for API integration)

Output Format


## ClaimReview Implementation: [Claim Summary]

### Generated JSON-LD
[Complete, valid ClaimReview JSON-LD block]

### Validation Results
- JSON syntax: [valid/invalid]
- Required properties: [all present / missing: X]
- Google Rich Results Test: [pass/fail]

### API Integration
- Claim Search: [X existing fact-checks found for this claim]
- Markup submission: [submitted / pending / not applicable]

### WordPress Integration
- Post meta fields: [configured / needs setup]
- Injection hook: [active / needs activation]

Anti-Patterns

  • Paraphrasing the claimclaimReviewed must be the exact verbatim claim, not a summary or interpretation
  • Missing claim author — Google requires identification of who made the claim; anonymous claims weaken the markup
  • Inconsistent rating scales — Define your 1-5 scale once and use it identically across all fact-checks
  • Fact-checking opinions — ClaimReview is for factual claims; opinions and predictions are not fact-checkable
  • Self-serving ratings — Rating your own organization’s claims positively undermines credibility
  • No validation before publication — Always test in Google Rich Results Test before going live
  • Ignoring Search Console — Monitor the Fact Check enhancement report for errors and indexing issues
  • Stale claim dates — Ensure datePublished on the claim reflects when the claim was actually made, not when you reviewed it
Table of Contents