Verify Claims Skill
Made-up stats are the most reliable way to mark a draft as AI-generated. This skill ensures every numerical claim has a real, citable source — and that internal-linking opportunities from brand-reference are wired in.
Input
For slug {slug}:
content-pipeline/5-drafts/{slug}.md(the draft to verify)content-pipeline/2-reference/{slug}.md(internal-linking opportunities)content-pipeline/brand-articles.json(Strapi inventory cache — defensive backstop when2-reference/is empty)
Process
Read the draft.
Extract every claim that needs a source:
- Numerical claims ("90% of pages get no traffic")
- Specific assertions about how things work ("Google's PageRank algorithm uses...")
- Quoted figures from people or studies
- Industry "research shows" claims
- Anything with a
[link]placeholder from drafting
For each claim, verify or replace:
- Use WebSearch + WebFetch to find a primary source. Prefer original studies, official documentation, or first-hand brand publications over second-hand citations.
- If the source confirms the claim → replace
[link]with the real URL using descriptive anchor text. Use markdown link syntax inline. - If the source contradicts the claim → either correct the number (using the real source) or remove the claim if it can't be supported.
- If you can't find a source within 2–3 search attempts → flag the claim with
[CITATION NEEDED]rather than fabricating one.
Add internal links from brand-reference. Walk through the draft section by section. Wherever a phrase matches an internal-linking opportunity from
2-reference/, link it. Use anchor text that matches the linked article's H1 when possible.Defensive backstop: if
2-reference/{slug}.mdlists zero internal-linking opportunities ANDcontent-pipeline/brand-articles.jsonexists withcount > 0, do NOT skip internal linking. Instead, score the inventory's articles for relevance to this draft (title/H2 keyword overlap) and weave in 2–3 of the best matches with descriptive anchor text. This catches the common failure mode where/brand-referenceran before the Strapi inventory was populated, or against a stale cache.Anchor text rules:
- Descriptive — matches what the linked page is about
- Not naked URLs ("https://...")
- Not "click here" or "read more"
- Not over-optimized — don't force exact-match keyword anchors for every internal link
Verify the verification. After all edits, scan once more — confirm no
[link]or[CITATION NEEDED]placeholders remain (or if they do, they're flagged for human review).Citation-density check (two tiers). Use the same heuristic as
quality_check.py(so the two stay aligned). Two tiers, treated very differently:- Must-cite claims — numbers, percentages, named studies, year-anchored facts, "according to X" assertions. Ryan's "cite everything" rule applies here. If coverage is below 60%, emit
## Editor notes / Citation gapslisting every unlinked must-cite claim by line number. The editor cuts, accepts, or asks for a broader search. - Voice-flagged statements — population quantifiers ("most platforms"), superlatives ("the only platform that..."), comparative absolutes ("every X is Y"), and named-brand mentions without links. These are usually opinionated voice, not citation-needing claims. Over-citing them damages the conversational tone the whole pipeline is built around. Emit
## Editor notes / Voice-flagged statements (review)listing them — editor decides per case. Never auto-link these — they are flagged for human judgment, not pipeline action.
The tier distinction is the load-bearing rule. Force a citation onto a sentence like "Most platforms claim 'uncensored' but few are" and the article reads like a footnoted academic paper instead of an Ahrefs blog post.
- Must-cite claims — numbers, percentages, named studies, year-anchored facts, "according to X" assertions. Ryan's "cite everything" rule applies here. If coverage is below 60%, emit
Save to
content-pipeline/6-drafts-cited/{slug}.md. The file structure is identical to the draft — just with real links substituted in.
Output
content-pipeline/6-drafts-cited/{slug}.md
The draft, with every numerical claim citing a real source and every appropriate internal-linking opportunity wired in.
Quality checklist
- Every numerical claim has a
[descriptive anchor](real-url)link - No remaining
[link]placeholders from drafting - No fabricated sources (sources that don't exist or don't say what's claimed)
- Internal links from
2-reference/wired in with descriptive anchor text — and at least 1 internal link present whenever the brand-articles inventory has relevant entries - No naked URLs in the body
- Any unverifiable claims marked
[CITATION NEEDED]rather than left unsourced - Must-cite citation density ≥ 60% (numbers, studies, year-anchored facts only); otherwise
## Editor notes / Citation gapsblock emitted - Voice-flagged statements (population claims, superlatives, brand mentions) listed in
## Editor notes / Voice-flagged statements (review)for editorial decision — NEVER auto-linked
When verification reveals a problem
If a stat in the draft is wrong (no source supports it), don't paper over it. Either:
- Replace the number with the actual one and adjust the surrounding sentence
- Cut the claim and rewrite the sentence to make the same argument without the disputed number
The draft was wrong before; making it look correct without fixing it is worse.
Common source patterns to prefer
- Direct sources — for a third-party-tool claim, link to the tool's official docs or a primary-source publication like Search Engine Land; for a Google claim, link to Google's official docs or a Search Central blog post
- Primary research — academic papers, industry surveys with stated methodology
- Recent over old — within 2 years preferred for changing fields like SEO
- Authoritative over popular — DR/UR matters less than whether the source is the actual originator of the data
Flag before save
If the draft makes claims that even with effort you can't verify, write a ## Editor notes section at the bottom of the cited file listing:
- Each
[CITATION NEEDED]location - Brief note on what you tried and why it's unverified
The human editor decides whether to cut the claim or accept the risk.