---
title: "The check catalog is the full list of what a Blockquote scan measures on a page."
description: "Every check a Blockquote scan runs: what it measures, why an AI assistant cares, and the typical fix. 34 checks across schema, structure and citability."
canonical: "https://blockquote.io/checks"
---

# The check catalog is the full list of what a Blockquote scan measures on a page.

Reference

A Blockquote scan is a fixed audit of **34 checks** across three weighted categories, and this page writes out all of them. Each entry states what the check reads, why an AI assistant weighs it when it picks a source, and the fix. The same entries reach AI agents through the [MCP server](https://blockquote.io/docs/ai-agents). By Arne Kellmann. Updated 2026-08-23.

In short

- 34 checks in three categories: Schema 40%, Structure 30%, Citability 30%.
- **29 checks are deterministic**; 5 are judged by a language model against a fixed rubric.
- A check that does not apply to a page is marked **N/A** and left out of the score.
- Every entry below carries an anchor: link to a single check as `/checks#<check-id>`.
- Pass thresholds live in the check implementations, not here.

## Schema — 40% of the score

17 checks. The category score is the weighted average of the entries below that applied to the page.

**JSON-LD present**

`schema-jsonld-present`

Whether the page embeds any JSON-LD structured data at all.

Structured data is the machine-readable layer AI systems parse first to understand what a page is.

**Fix:** Add a \<script type="application/ld+json"\> block describing the page (Article, Organization, …) to the \<head\>.

**Organization schema**

`schema-organization`

Whether an Organization (or publisher) entity is declared in structured data.

Assistants attribute claims to identifiable publishers; an unnamed source is harder to cite.

**Fix:** Add Organization JSON-LD with name, url, and logo, and reference it as the page's publisher.

**Article schema**

`schema-article`

Whether content pages declare an Article/BlogPosting entity with headline and dates.

Article markup tells an assistant this is editorial content with a publication history, not chrome.

**Fix:** Add Article JSON-LD with headline, datePublished, dateModified, and author.

**FAQPage schema**

`schema-faqpage`

Whether pages with question-and-answer content declare FAQPage markup.

Q&A pairs in FAQPage markup are directly liftable as answers by AI systems.

**Fix:** Mirror the on-page questions and answers in FAQPage JSON-LD (only content that is visible on the page).

**Author schema**

`schema-author`

Whether structured data names a Person (or Organization) as the content's author.

Attribution to a named author is a trust signal assistants weigh when choosing sources.

**Fix:** Add an author Person to the Article JSON-LD with name and, ideally, url or sameAs.

**Breadcrumb schema**

`schema-breadcrumb`

Whether BreadcrumbList markup describes where the page sits in the site.

Breadcrumbs give assistants the page's topical context and help them cite the right level.

**Fix:** Add BreadcrumbList JSON-LD mirroring the visible breadcrumb trail.

**Sitemap coverage**

`schema-sitemap`

Whether the site serves a sitemap.xml and it includes the scanned URL.

A sitemap is how crawlers that feed AI systems discover and revisit the page.

**Fix:** Serve /sitemap.xml, include this URL with an accurate lastmod, and reference it in robots.txt.

**llms.txt present**

`schema-llms-txt`

Whether the site serves an llms.txt file with meaningful sections.

llms.txt is the emerging convention for telling AI systems what a site offers and how to use it.

**Fix:** Serve /llms.txt (llmstxt.org format): a one-line summary, key pages, and access policy.

**LLM crawler access**

`schema-robots-llm-access`

Whether robots.txt allows the major AI crawlers (GPTBot, ClaudeBot, PerplexityBot, …).

A blocked AI crawler cannot read the page, so it can never cite it.

**Fix:** Allow the AI crawlers you want citations from in robots.txt (and block only what you mean to block).

**Canonical URL**

`schema-canonical`

Whether the page declares a canonical URL that matches where it is served.

Assistants consolidate signals per canonical URL; ambiguity splits citation equity.

**Fix:** Add \<link rel="canonical"\> pointing at the page's one true HTTPS URL.

**Open Graph tags**

`schema-open-graph`

Whether og:title, og:description, and og:image are present and non-empty.

Open Graph is a widely parsed summary layer that AI link previews and crawlers reuse.

**Fix:** Add complete Open Graph meta tags with an absolute 1200×630 og:image URL.

**Knowledge graph sameAs**

`schema-knowledge-graph`

Whether the publisher entity links out to its profiles via sameAs.

sameAs ties the site to known entities (Wikipedia, LinkedIn, …), anchoring it in knowledge graphs.

**Fix:** Add a sameAs array of official profile URLs to the Organization or Person JSON-LD.

**Publication date**

`schema-date-freshness`

Whether the page carries a machine-readable publication/modification date, and how old it is.

Assistants prefer sources they can date; undatable content loses to fresher-looking pages.

**Fix:** Declare datePublished and keep dateModified current in the Article JSON-LD.

**Meta description**

`schema-meta-description`

Whether a meta description exists and is a useful length.

The description is a ready-made summary crawlers store alongside the page.

**Fix:** Write a 120–160 character meta description that states what the page answers.

**Image alt text**

`schema-image-alt-text`

Whether content images carry descriptive alt attributes.

Alt text is the only way non-visual systems know what an image contributes.

**Fix:** Give every meaningful content image a specific, descriptive alt attribute.

**JSON-LD validity**

`schema-jsonld-validity`

Whether every JSON-LD block on the page parses as valid JSON.

A broken block silently drops the whole structured-data layer for parsers.

**Fix:** Fix the JSON syntax (trailing commas, unescaped quotes) so every block parses.

**Date consistency**

`schema-date-consistency`

Whether dates in structured data agree with the dates shown on the page.

Conflicting dates read as unreliable metadata and undermine freshness signals.

**Fix:** Make visible dates and JSON-LD dates identical, including the timezone story.

## Structure — 30% of the score

8 checks. The category score is the weighted average of the entries below that applied to the page.

**TL;DR or summary block**

`content-tldr`

Whether the page opens with a short summary of its key points.

A summary block is the easiest span for an assistant to quote as the answer.

**Fix:** Add a 2–4 sentence TL;DR near the top that states the page's core claims.

**Direct answer near the top**

`content-direct-answer`

Whether the page answers its main question within the first paragraphs.

Assistants extract answers, not essays; a buried answer often is not found at all.

**Fix:** State the direct answer in the first ~100 words, then elaborate below it.

**Question-style H2 structure**

`content-question-h2`

Whether section headings are phrased as the questions readers actually ask.

Question headings map one-to-one onto user queries, making sections retrievable as answers.

**Fix:** Rephrase key H2/H3 headings as full questions ("How does … work?").

**Definition-led opener**

`content-definition-opener`

Whether the page opens by defining its subject in one clean sentence.

A crisp definition sentence is the single most quotable pattern in AI answers.

**Fix:** Open with "\<Subject\> is …" — one self-contained defining sentence.

**Lists and tables**

`content-lists-tables`

Whether the content uses lists or tables where it enumerates or compares.

Structured enumerations are extracted far more reliably than the same facts in prose.

**Fix:** Turn step sequences and comparisons into ordered lists or small tables.

**Subheading frequency**

`content-subheading-frequency`

Whether long stretches of prose are broken up by subheadings.

Headings segment the page into retrievable chunks; walls of text blur into noise.

**Fix:** Add a descriptive subheading roughly every 150–300 words.

**Client-side rendering**

`content-client-rendered`

Whether the raw HTML this scan fetched carries the page's content, or only a script-driven shell that fills it in after load.

AI crawlers fetch a page once and do not run JavaScript, so content that exists only after client-side rendering is invisible to them.

**Fix:** Server-render or statically prerender the route so its content ships inside the first HTML response.

**Extractable content scope**

`content-extractable-scope`

Whether the primary heading, and the bulk of the text, sit outside \<header\>, \<footer\>, \<nav\> and \<aside\>.

Extractors drop those elements as page chrome, so a heading or a paragraph inside one never reaches the AI system reading the page.

**Fix:** Move the H1 and the body copy into \<main\> or \<article\>; keep header, footer, nav and aside for site furniture.

## Citability — 30% of the score

9 checks. The category score is the weighted average of the entries below that applied to the page.

**Fact density**

`citability-fact-density`

LLM-judged: how many concrete, checkable facts the content carries per unit of text.

Assistants cite pages that state facts, not pages that talk around them.

**Fix:** Replace vague claims with numbers, dates, names, and specific outcomes.

**Author byline**

`citability-author-byline`

Whether a visible byline names who wrote the page.

A named human behind the content is a source-quality signal assistants reward.

**Fix:** Add a visible byline with the author's name (and link it to an author page).

**Original data or unique claims**

`citability-original-data`

LLM-judged: whether the page contributes information that does not exist elsewhere.

Original numbers and firsthand findings are what make a page the source rather than a copy.

**Fix:** Publish something only you have: your own measurements, benchmarks, or documented experience.

**Direct paragraphs**

`citability-direct-paragraphs`

LLM-judged: whether paragraphs make their point in the first sentence.

Front-loaded paragraphs survive extraction; throat-clearing gets truncated away.

**Fix:** Rewrite paragraph openers to state the conclusion first, evidence second.

**Citation density**

`citability-citation-density`

Whether the content links out to credible sources for its claims.

Pages that cite their sources read as researched — and get cited in turn.

**Fix:** Link claims to primary sources; a handful of authoritative external links beats none.

**Emphasis and scannability**

`citability-emphasis`

Whether key phrases are emphasized (bold/strong) at a healthy rate.

Emphasis marks the load-bearing phrases, guiding both readers and extractors.

**Fix:** Bold the decision-relevant phrases — sparingly, roughly a handful per section.

**Word count**

`citability-word-count`

Whether the main content is substantial enough to be a citable treatment.

Thin pages rarely contain enough substance to answer anything on their own.

**Fix:** Grow the page toward a complete treatment of its question (typically 1,000+ words).

**Pronoun clarity**

`citability-pronoun-clarity`

LLM-judged: whether sentences remain unambiguous when quoted out of context.

A sentence full of "it" and "this" is useless as a standalone quote.

**Fix:** Replace ambiguous pronouns with their nouns in key sentences.

**Quote extractability**

`citability-quote-extractability`

LLM-judged: whether the page contains self-contained sentences worth quoting verbatim.

Assistants prefer lifting a precise sentence over paraphrasing a vague one.

**Fix:** Write a few deliberate, self-contained key sentences that survive being quoted alone.

## Which checks does a language model judge?

5 of the 34 checks are judged by a language model: fact density, original data, direct paragraphs, pronoun clarity and quote extractability. Each of them reads the page text against a fixed rubric at temperature 0. A paid scan runs three judgments and keeps the median, which is what keeps week-over-week monitor deltas stable. A free scan takes one judgment, so a borderline verdict can move between scans. The report labels every one of them with an AI marker next to the check name.

The other 29 checks are deterministic. They parse the HTML, the JSON-LD, robots.txt, llms.txt and the sitemap, and compute a verdict from counts and patterns alone. No model sees them, and the same page scores the same way on every run.

## What happens when a check does not apply to a page?

The check is marked N/A and left out of the score entirely. FAQPage schema on a page with no questions, or Article schema on a pricing page, are the common cases: the page is not worse for lacking them, so scoring them would punish the page for its type. A category score is the weighted average of the checks that did apply.

Page type drives most of this. The scanner classifies every page as content, legal, transactional, navigational or other before the checks run, and a check reads that classification when its relevance depends on it.

## Where do the pass thresholds live?

In the check implementations, not in this catalog. Most checks compute a score between 0 and 1 against a target, then pass above their own threshold. Citation density targets five external links in the main content and passes at three. Emphasis targets one strong or em tag per 200 content words and passes at half that rate. A presence check has no target: Breadcrumb schema, sitemap coverage and llms.txt either exist or do not. This page states what a check measures and how to fix it; the exact number a check wants is an implementation detail that changes as the rubric is calibrated.

A scan reports the measurement back as evidence wherever a check has one. A presence check says what it found instead. The report is where you read the result; this page is where you read the intent.

## How often does the catalog change?

A check is added or removed only with a release, and the catalog changes in the same commit. The type system enforces that: the catalog is declared against the full set of check ids, so a new check that ships without an entry here fails the build. A test compares the ids on this page against the catalog and fails when the two differ.

Wording changes more freely than the set does. The description, the reason and the fix on each entry are edited when a rubric is recalibrated or when a fix turns out to be unclear in practice.

## Sources the rubric is built on

Four published sources anchor the checks above: [Google Search Central on AI features](https://developers.google.com/search/docs/appearance/ai-features), the [schema.org vocabulary](https://schema.org/), the [llms.txt proposal](https://llmstxt.org/), and [Generative Engine Optimization](https://arxiv.org/abs/2311.09735) (arXiv 2311.09735). The [content playbook](https://blockquote.io/llm-friendly) is the method behind them; this page is the list. Run a [scan](https://blockquote.io/) to see which of these 34 checks your own page passes.

---

Canonical HTML page: <https://blockquote.io/checks>
