Everything about content quality, the FAQ overhaul, AI-citation (GEO), and editorial authority. The FAQ overhaul is the active workstream (handoff: bowtie note #181). Full 552-item FAQ inventory lives in the generated faq-master-index.md (data appendix, regenerate with scripts/faq-index.mjs).
Consolidated from faq-authoring-rules.md · status: active
The rules every FAQ set is built and reviewed against. If a question or answer fails a rule here, it does not ship. This exists to prevent the one thing we will not do: generic questions padded onto a page for SEO volume.
Read alongside: faq-master-index.md (what exists), faq-corpus-audit.md (84% keep / provenance flag), faq-system-overhaul-spec.md (render + schema plan).
Every question must name the page's specific subject — its use case, niche, provider, or topic. A question that would read identically on ten different pages is banned.
The subject goes in the question, not just the answer:
| ❌ Generic (banned) | ✅ Tailored (required) |
|---|---|
| Is it worth paying for a VPN? | Is a paid VPN worth it just for streaming, or is Netflix's own error-workaround enough? |
| Does a free VPN work? | Does a free VPN actually unblock Netflix libraries, or do they all get detected? |
| Is a VPN good for gaming? | Does a VPN lower ping to overseas game servers, or only add latency? |
| Are free VPNs safe? | Are free Android VPNs safe, given 72% ship with tracking libraries? |
| How many devices are supported? | Can I run NordVPN on my router and still cover my 6 personal devices? |
Repurposable slots: max 2-3 per page, and even these are customized templates, never pasted verbatim. Allowed evergreen templates (each MUST take the page's [subject]):
Does a free VPN work for [this specific use case]?How much does the right VPN for [use case] actually cost?Is using a VPN for [this use case] legal? — only if the page's topic isn't already owned by the are-vpns-legal page (see Rule 6).If you can't make an evergreen slot page-specific, drop it and mine a real tailored question instead. We would rather ship 13 sharp questions than 20 with 5 generic ones.
Every FAQ carries two tags:
The user-facing label is the genericness test: if a question does not fit one clear, specific topic label, it is generic — rewrite it or cut it. "Is a VPN worth it?" fits no sharp label. "Does a VPN slow 4K streaming?" fits Speed. That difference is the whole rule.
| Bucket | The job | Tailored trigger |
|---|---|---|
| Research | Teach the mechanism for this topic | "How does [Netflix] detect VPNs?" |
| Objection | Kill the specific hesitation | "Won't a VPN slow my [gaming ping]?" |
| Pre-purchase | Help decide this option | "Which VPN is #1 for [4K streaming]?" |
| Outcome | After they act — under-served (~10% today) | "What if [the game] blocks my VPN?" |
A page with 15 research and zero outcome questions fails. New sets over-index outcome until the site balances.
FAQ · Speed · Pricing · Technical · Money-back · Setup …Labels are the visible toggles. Use only these; add a new label only if a real question genuinely fits none (and add it here). Each maps to a typical internal bucket so we keep balance while displaying topics.
| Label (shown) | Usual bucket | Fits questions about |
|---|---|---|
| How it works | Research | mechanism, what it does for this use case |
| Speed | Objection | slowdown, ping, throughput, buffering |
| Streaming | Pre-purchase | Netflix/Disney+/library access (use-case pages) |
| Safety & Privacy | Objection/Research | logs, jurisdiction, breaches, audits, tracking |
| Free vs Paid | Objection | free-tier limits, "is free enough for [X]" |
| Technical | Research | protocols, kill switch, split tunneling, DNS leaks |
| Legal | Research | legality for this use/region (defer to are-vpns-legal, Rule 6) |
| Pricing | Pre-purchase | cost, plans, discounts, renewals |
| Money-back | Pre-purchase | guarantee window, refunds, free trials |
| Devices | Pre-purchase | simultaneous connections, platform/router compatibility |
| Setup | Outcome | install/configure for this device or use case |
| Troubleshooting | Outcome | "what if it's blocked / disconnects / leaks" |
| Label | Bucket | About |
|---|---|---|
| Fees & Cost | Pre-purchase | commission, $0 upfront, when you pay |
| How it works | Research | valuation, outreach, escrow, transfer |
| Confidentiality | Objection | anonymity, discreet outreach |
| Valuation | Research/Pre-purchase | what a domain is worth, pricing logic |
| Timeline | Pre-purchase | how long buy/sell takes |
| Why a broker | Objection | vs DIY / vs marketplace |
The vocabulary is the discipline: if you're reaching to force a question into a label, the question is generic — that's the signal to cut or sharpen it.
get_search, filtered to the page — NOT the domain top-50, which is ~90% brand/navigational) + People-Also-Ask + real support/sales questions.We have real, citeable data — use rank, cite it honestly. The speedlab block in each src/data/providers/*.json + getSpeedLabData() gives every provider a rank out of 22 across speed/streaming/security/etc. That is the gold source for FAQ answers.
DO:
methodology.md: "across the independent labs we aggregate (Cybernews, Cloudwards, Security.org, et al.)."DON'T (the two real liabilities the audit found):
Net rule: "[Provider] ranks #[Y] of 22 for [Z], per our Speed Lab" is the sanctioned pattern — sourced from our JSON, honest about aggregation. Hard Mbps and "we tested" are out until the data is reconciled (separate task). New authoring uses rank; it does not add to the 43 Mbps / 14 "we tested" debt.
Base.astro — no double emission; see the historic duplicate-schema bug).are-vpns-legal), the hub/other pages defer to it rather than re-answering — a tailored angle or a link, not a copy.feedback_access_not_unblock).vpnHubFAQ #5 is flagged EDIT for this).Templates to customize, not paste. Each [bracket] is filled with the page's real subject. These are starting skeletons — mine real tailored questions to reach 12-20.
nordvpn.md)best-vpn-for-gaming, best-vpn-for-streaming/netflix)/vpn/, /cybersecurity/)/domain-broker/*)FAQ · [labels]); label group only shown at ≥2 questionsgetSpeedLabData), framed as aggregated per methodology.md. No "we tested," no hard Mbps as measured fact (see Rule 4). Reconciling the existing 43 Mbps / 14 "we tested" answers is a separate cleanup task.Rules are locked — ready to build.
The standard is tailored or it doesn't ship. Structure (12-20, four buckets, outcome-weighted), real demand (page-filtered GSC/PAA), data-backed honest answers (no un-sourced metrics), no true dupes, schema everywhere. Generic questions — even "does a free VPN work" in its bare form — are banned; the page's subject lives in the question. Build every set against the Definition of Done.
Consolidated from faq-buildkit-best-free-vpn.md · status: active
/vpn/best-free-vpn/ (the reference set)Turnkey spec for the build worker. This is the reference implementation every other page copies. Build it against faq-authoring-rules.md + its Definition of Done. Questions are grounded in real demand (GSC page: 14,031 impressions/30d; PAA + Reddit/comparison SERPs for "best free vpn", "free vpn netflix", "proton vs windscribe free", "free vpn no data cap", "free vpn data limit").
Target: 16 questions (inside the 12-20 band). Current page has 5 → keep 4, edit 1, add 11.
getSpeedLabData() / src/data/providers/*.json): hide.me #6 of 22 · Proton #12 · Privado #13 · Windscribe #18. Cite rank, framed as aggregated per methodology.md. No Mbps, no "we tested."best-vpn-for-android.md) — reuse with the same source.Legend: Label = visitor-facing toggle · Bucket = hidden coverage tag · Status = keep / edit / new.
| # | Question (tailored) | Label | Bucket | Status | Answer source / angle |
|---|---|---|---|---|---|
| 1 | Are free VPNs safe, or do they sell your data? | Safety & Privacy | Objection | keep | Existing #1. Tighten: only paid-funded tiers (Proton/Windscribe/hide.me) are safe; 72% of free Android apps carry trackers (cite study). |
| 2 | Is Proton VPN's free plan actually safe? | Safety & Privacy | Objection | new | Open-source + independently audited, no logs, Switzerland. Names the one free tier you can fully trust. |
| 3 | How can I tell if a free VPN is logging me? | Safety & Privacy | Outcome | keep | Existing #4 (privacy-policy red flags). Strong as-is. |
| 4 | Why are some free VPNs trustworthy and others dangerous? | How it works | Research | new | The paid-tier-funded model vs "you are the product." The page thesis, front-loaded. |
| 5 | Which free VPN has no data cap? | Free vs Paid | Pre-purchase | keep | Existing #2 (Proton = only truly unlimited). Add the one-line contrast to the capped ones. |
| 6 | What are the data limits on the top free VPNs? | Free vs Paid | Research | new | Comparison: Proton unlimited · Windscribe 10 GB · Privado 10 GB · TunnelBear 2 GB. (Also feeds the comparison-block component.) |
| 7 | Which free VPN is fastest? | Speed | Objection | new | hide.me ranks #6 of 22 in our Speed Lab — the fastest of the trustworthy free tiers; Proton #12. ← the rank-cite showcase (Rule 4). |
| 8 | Can a free VPN actually unblock Netflix? | Streaming | Objection | edit | Existing #3. Fix the "in our testing" phrase (Rule 4 violation) → "Windscribe unblocks Netflix US/UK/CA on its free tier; Privado ranks best for streaming among free options." Honest: most fail. |
| 9 | What's the best free VPN for streaming on a budget? | Streaming | Pre-purchase | new | Windscribe (region unblocks) vs Privado (streaming rank); the realistic answer + the paid-upgrade trigger. |
| 10 | How many devices can I cover with a free VPN? | Devices | Pre-purchase | new | Proton free = 1 device; Windscribe = unlimited. The real decision axis for households. |
| 11 | Is a free VPN good enough for public Wi-Fi, or do you need paid? | Free vs Paid | Objection | new | Evergreen [use case] slot, customized. NOT "can a VPN protect me on public Wi-Fi" — that's owned by what-is-a-vpn (dedup, Rule 6). Free-specific framing. |
| 12 | How do I set up a free VPN on iPhone or Android? | Setup | Outcome | new | Concrete steps; note app-store trust (ties back to the 72% stat). |
| 13 | How do I upgrade a free VPN to paid without losing my setup? | Setup | Pre-purchase | new | Same account/app, plan flip; removes the friction objection to converting. |
| 14 | What happens when my free VPN runs out of data mid-month? | Troubleshooting | Outcome | new | Privado throttles (not cutoff); Proton never caps; Windscribe stops at 10 GB. Answers the real pain. |
| 15 | Why does my free VPN keep getting blocked or disconnecting? | Troubleshooting | Outcome | new | Free IP ranges are flagged/overloaded; what to try; when it's a hard limit of free. |
| 16 | When should you stop using a free VPN and pay? | Free vs Paid | Objection | keep | Existing #5. Strong. The honest upgrade trigger. |
what-is-a-vpn, and a true-dupe on most-secure-vpn per the audit).best-vpn-for-streaming cluster owns general streaming; keep these about the free constraint.FAQ.astro accordion, grouped by the 8 labels under one FAQ heading.ranking template → already gets schema via [...slug].astro; verify each Q/A is self-contained after the extractFaqItems flattening fix).Logged in bowtie note #181. Worker builds the answer prose + wiring; this kit fixes the questions, labels, buckets, data, and dedup so no invention is needed.
Consolidated from faq-corpus-audit.md · status: active
Adversarial quality audit of the 552-item English FAQ corpus (see faq-master-index.md) against Ben's rubric: real question + useful, data-backed answer + objection handling; no SEO-filler; no vague answers.
| Tier | Count | % |
|---|---|---|
| KEEP (good as-is / trivial tweak) | ~466 | 84% |
| EDIT (real question, weak answer) | ~83 | 15% |
| REDO (filler / dupe / no substance) | ~3-7 | ~1% |
| Cluster | Items | KEEP | EDIT | REDO |
|---|---|---|---|---|
| Hubs (System B) | 24 | 17 (71%) | 7 (29%) | 0 |
| VPN guides/rankings | 327 | ~265 (81%) | ~61 (19%) | 1 |
| Provider reviews | 110 | ~101 (92%) | ~7 (6%) | 2 |
| Domain broker | 36 | ~34 (94%) | ~2 (6%) | 0 |
| Cybersecurity | 42 | ~38 (90%) | ~4 (10%) | 0 |
| Hosting | 13 | ~11 (85%) | ~2 (15%) | 0 |
Corroborated by the May 2026 site-wide rewrite (memory project_site_history: 1-3/10 → 7-9/10) which already did the quality pass. Answers front-load the direct answer, use numbers, handle objections honestly.
43 FAQ answers cite Mbps figures and 14 claim "our tests / we tested" — and Speed Lab data is static/fake (memory project_speedlab_research). "CyberGhost ranks #10 of 22 VPNs we tested at 612 Mbps" is exactly the data-driven format the rubric wants, built on numbers we never measured. Structurally KEEP, ethically a liability, fatal if an LLM-citation strategy invites scrutiny. Resolve before the overhaul: get real numbers, attribute to external benchmarks, or strip the "we tested" claims. The 5 speed-test pages (16 items) are scored EDIT entirely for this reason.
| Bucket | Share | Notes |
|---|---|---|
| Research | ~40% | Definitional, detection mechanics, X-vs-Y |
| Objection | ~27% | free-vs-paid, slowdown, post-breach safety; broker hub is the best objection set on the site |
| Pre-purchase | ~23% | cost, plans, devices, refunds, compatibility |
| Outcome | ~10% | Most under-served — the biggest content gap |
Outcome items that exist are strong (Mint "verify VPN is working" with real curl ifconfig.me; "why does my VPN disconnect on mobile data" with reconnect times) but concentrated on Linux/free-trial pages. Streaming, provider, hub pages have almost none.
KEEP — best-vpn-for-android "Are free VPNs safe on Android?" (2024 study, 72% had trackers); netflix "How does Netflix detect VPNs?" (names IP reputation/DNS mismatch/WebRTC + counters); nordvpn "safe after 2018 breach?" (objection met head-on); windscribe "why only 3-day guarantee?" (honest); sell-premium-domain "What if I already received an offer?" (floor-not-ceiling, 30-100% uplift).
EDIT — nordvpn-pricing "Accept gift cards?" ("availability varies, check the page" = non-answer); domainBrokerFAQ (all 5 — great questions, pure-assertion answers while $75M+/proofSaved data sits one click away); 5 speed-test pages (fabricated provenance); perksFAQ "how often new deals?" (vague); vpnHubFAQ "VPN for torrenting?" (off-policy per access-not-unblock + the homepage torrenting removal).
REDO — avast-secureline "What's the best VPN for Netflix?" (off-topic funnel, dupes streaming cluster — textbook filler, but only ONE found in 134 read); most-secure-vpn "public Wi-Fi?" (verbatim dupe of what-is-a-vpn); best-vpn-for-iphone "why upload speed matters more" (invented framing; salvage the data under a real question).
Model rewrites (vague → data-driven):
Build on it, don't tear it down. ~84% already meets the bar. Real deficits, in priority: (1) volume — every page under the 12-20 target, an expansion job; the questions to add are known (outcome bucket + GSC/PAA-mined); (2) data provenance — the 43 Mbps / 14 "we tested" claims from static Speed Lab, resolve before any LLM-citation push; (3) hub answers are data-poor vs the posts (broker hub worst); (4) ~83 one-sentence EDIT fixes. ~90% of overhaul spend belongs in net-new questions + data verification, not rewriting what exists.
Consolidated from faq-system-overhaul-spec.md · status: active
Meeting mandate (July 21): every cluster gets a real FAQ block — 12-20 questions, split across four intent buckets (research / objection / pre-purchase / outcome), no duplicates, LLM-optimized, schema, real human-intent questions as the staple. Plus a machine-page version (faq + citations + takeaway + metrics), a master FAQ page, a master index page, and an authority / citation-token evaluation.
Deliverable mode is spec/doc. This is the target design + phased plan for the implementing worker. Nothing has been changed.
| System A (markdown) | System B (hub, hardcoded) | |
|---|---|---|
| Where | ## Frequently Asked Questions in post/page .md, ### Q / paragraph A | TS objects in src/i18n/translations.ts (vpnHubFAQ, cybersecurityFAQ, hostingFAQ, domainBrokerFAQ, perksFAQ) |
| Coverage | 97/113 EN posts, all 22 provider pages, 19 ranking pages | 5 hubs only |
| Count | Variable | 4-5 items each (below the 12-20 target) |
| Render | Flat prose headings — no accordion | Accordion (FAQ.astro, <details>) |
| Schema | Auto JSON-LD via extractFaqItems() in [...slug].astro:175 — but only Editorial/Ranking templates; provider + pillar get none | JSON-LD via Base.astro:222 |
| i18n | Whole-file translation | Inline per-lang in translations.ts |
Consequences to fix:
extractFaqItems() flattens answers ([...slug].astro:175-191): answer = first paragraph only, multi-paragraph collapsed, markdown links passed as raw text into schema. LLM-quality answers need this fixed.## FAQ markdown that renders but emits NO schema — faqItems isn't passed to those layouts. Pure loss.Existing infra to reuse (don't rebuild):
rehype-citations.mjs — auto-harvests authoritative links → [n] superscripts + Sources section + citation JSON-LD. This is the citation engine for the machine page.public/llms.txt (hand) + public/llms-full.txt (generated, scripts/generate-llms-full.mjs) — the machine-index scaffolding for a "master index" already exists.rehype-strip-bottomline.mjs strips it on ranking pages.src/data/providers/*.json → /data/providers/{slug}.json — machine-readable data precedent.src/content/ops/geo-ai-citations.md (front-load answers, stat-rich, benchmark data cited 2.8× more), authority-roadmap.md.Keep FAQs in the content markdown (translatable through the existing pipeline), but make the intent buckets explicit so dedup, ordering, and the machine page can key off them. Two options — recommend Option A:
### questions. Keep ## Frequently Asked Questions + ### Q structure (zero new authoring syntax, existing translation flow untouched), and group under intent sub-headings the parser understands but that render cleanly:
## Frequently Asked Questions
### [research] How does a VPN actually hide my traffic?
Answer…
### [objection] Isn't a free VPN good enough?
Answer…
Parser strips the [bucket] tag into a category field on each FAQ item; the visible question omits it. Fully backward-compatible — untagged ### questions default to research.faq: [{q, a, intent}] in frontmatter. Cleaner data, but breaks the current markdown-body translation path (frontmatter isn't translated the same way) and forces re-authoring 97 posts. Higher risk — only if we want FAQs fully decoupled from body prose.Migrate the 5 hub FAQs (System B) OUT of translations.ts into the same markdown convention on their hub content, OR into a shared TS shape that the same renderer + schema path consumes. Goal: one render component, one schema emitter, one dedup check — not two.
translations.tsis a translation SSOT with contamination landmines (see CLAUDE.md § Translation SSOT). Moving hub FAQ objects touches it — pull up LayerView first (lv describe file:src/i18n/translations.ts vpn-astro), and runnode scripts/i18n-contamination-check.mjs --gateafter.
Route the parsed faqItems through FAQ.astro (<details> toggles) on all templates — posts, provider, pillar, hub. Kills the flat-prose inconsistency. Group visually by intent bucket (optional sub-labels).
Extend faqItems to the Provider and Pillar layouts (currently schema-less). Fix extractFaqItems() so answers keep full text (all paragraphs) and render markdown links as text without dropping them. One FAQPage JSON-LD emitter in Base.astro (already there) — just feed it from every template.
Guard the known duplicate-schema bug (
domain-broker-recovery.md:23): only ONE emitter (Base JSON-LD).FAQ.astromust not re-emit microdata. Verify in GSC Rich Results after rollout.
Every cluster's FAQ set = 12-20 questions, roughly balanced:
| Bucket | 3-5 each | The real question behind it |
|---|---|---|
| Research | Understanding the category | "How does X work / what is X / is X legal?" |
| Objection | Why the visitor hesitates | "Isn't free enough? / does it slow me down? / can I be tracked anyway?" |
| Pre-purchase | Deciding this option | "Which plan? / money-back? / how do I set it up? / does it work on my device?" |
| Outcome | After they act | "What do I do if it disconnects? / how do I confirm it's working? / what changes for me?" |
Rules (enforce, don't just recommend):
mcp__askbowtie__get_search top queries per cluster) + People-Also-Ask, not invented. This is the highest-leverage step; the questions ARE the moat.geo-ai-citations.md finding), then the why, then a stat/citation. 40-60 words is the citation sweet spot per that doc.The meeting wants a machine-readable page variant carrying: faq, citations, takeaway, metrics. All four inputs already exist in some form:
faqItems (intent-tagged).rehype-citations.mjs output (the citation JSON-LD + Sources).> **Bottom Line:** blockquote.geo-ai-citations.md — flag which metrics are real before publishing them as cited facts; do not emit fabricated metrics into a machine page).Recommended shape: a per-page .json (or .md) machine variant, e.g. GET /{permalink}/index.json, emitting { url, title, takeaway, faq: [{q, a, intent}], citations: [{n, source, url}], metrics: {...} }. Reuse the src/pages/*.json.ts route pattern (languages.json.ts is the precedent). Keep it English-first (matches llms-full.txt being EN-only).
Decision to confirm: machine variant per-page vs. one big feed. Given llms-full.txt already aggregates, the per-page JSON + a link from llms.txt is the lower-lift, more-citeable route.
/faq/ or /vpn-faq/): aggregates every cluster's FAQs, grouped by cluster + intent. This is a strong GEO/AI-citation asset (one authoritative Q&A hub). Schema caution: a page with 100+ FAQPage items can trip Google's rich-result limits and dilute per-page schema — decide whether the master page carries full FAQPage schema or links to the per-cluster canonical FAQ. Recommend: master page = navigation + on-page answers, but each Q's canonical schema stays on its cluster page (avoids the duplicate-schema authority split).llms.txt (the machine index) as the human-facing counterpart.scripts/faq-dedup-check.mjs that collects every FAQ question site-wide, normalizes (lowercase, strip punctuation), and fails the build on near-duplicate questions across pages (fuzzy match, e.g. Levenshtein/token overlap). This is what enforces "no duplicate FAQs" — otherwise it drifts back immediately. Wire into deploy.sh gates alongside the existing i18n/link checks.Meeting item: "evaluate authority, token use for citations." Concretely:
rehype-citations.mjs output — how many citations per page, are the harvested sources actually authoritative (gov/edu/major-press vs. random blogs), and what's the token cost of the appended Sources block + [n] markup on every page (it ships in HTML on ~all posts).geo-ai-citations.md already argues cited benchmark data is worth it; this validates the implementation is pulling good sources, not padding.Phase 0 — foundation (unblocks everything, low content lift):
extractFaqItems() answer flattening + link handling.faqItems → Provider + Pillar layouts (instant schema win on 22 provider pages).FAQ.astro accordion (kill flat prose).[intent] parser tag (Option A) — backward-compatible.scripts/faq-dedup-check.mjs, wire as a build gate.Phase 1 — content, per cluster by traffic:
6. Mine GSC/PAA questions per cluster; author 12-20 across the four buckets; migrate hub FAQs off translations.ts into the unified path.
Phase 2 — machine + master: 7. Per-page machine JSON variant (faq/citations/takeaway/metrics), flag fake metrics. 8. Master FAQ page + master index page (schema-canonical decision per §5).
Phase 3 — evaluation: 9. Authority / citation-token report (§6); adjust citation harvesting.
###, recommended) vs. Option B (frontmatter array). Gates all downstream work..json route (recommended) vs. aggregated feed.llms-full.txt?The blocker isn't missing FAQs — it's two fragmented systems and schema-less provider/pillar pages. Phase 0 (unify render + schema + fix the parser + dedup gate) is pure infra and unlocks the meeting's asks cheaply. Then the real work is content: mine real human questions per cluster (GSC/PAA, not invented), 12-20 across four intents, deduped, LLM-front-loaded. The machine page, master pages, and citation eval all reuse infra that already exists (rehype-citations, llms.txt, Bottom-Line, provider JSON) rather than net-new systems.
Consolidated from geo-ai-citations.md · status: active
Researched 2026-06-06 (web-validated). The question: is it worth optimizing for AI citations (ChatGPT, Perplexity, Google AI Overviews, Gemini), and what does it actually take? Companion to [authority-roadmap] (the moat/Speed Lab plan) and the comparison + authority moves in [next-50-days].
Yes — but it's an authority + original-data play, not a schema/llms.txt play. And it's not a new initiative: the comparison supercluster and the Speed Lab/methodology work are the GEO engine. The single decision that unlocks it: make the Speed Lab data real, or stop leaning on it.
The highest-leverage asset is original data others can cite — exactly the Speed Lab. But ours is static/fake. Publishing fake benchmarks that AI cites is a reputational + legal landmine — one Reddit thread or journalist catch torches the authority you're building.
Decision: make the top-5 Speed Lab genuinely real + dated (citable, press-able, backlink-bait via the verification badge) — or stop relying on it. No safe "fake-but-cited" middle. Everything in the authority half of the plan hinges on this call.
AI citations don't show cleanly in GA4. To know if this works, track answer-share / citation frequency for our target queries across ChatGPT/Perplexity/Google AIO (an AI-visibility monitor), plus AI referral sessions + conversion in itbroke. Baseline before, measure after.
Consolidated from authority-roadmap.md · status: active
Goal: VPN.com becomes the cited source for VPN data, not a site that references other sources.
Success: AI assistants cite VPN.com Speed Lab data. Providers display "VPN.com Verified" badges. Journalists reference the Trust Score. The methodology page is linked from Wikipedia.
Have: 120-page static site, Speed Lab (10 providers), 100-point rating system, JSON-LD, llms.txt, /methodology/ page.
Missing:
Priority: Critical — everything else rests on this.
Rewrite /methodology/ to read like a research paper. Must cover:
Tone: technical, transparent, boring. Written for peer review, not for customers. Reference: AV-TEST methodology
Name it. Always display as "94/100 VPN.com Trust Score." Reference by name in every provider review.
Score ranges on the methodology page:
| Range | Meaning |
|---|---|
| 90-100 | Exceptional |
| 80-89 | Excellent — minor gaps |
| 70-79 | Good — notable tradeoffs |
| 60-69 | Fair — significant concerns |
| <60 | Not recommended |
Strengthen /disclosures/ to explicitly state: VPN.com earns commissions; affiliate relationships never influence scores; methodology is public and applied uniformly; providers cannot pay for higher scores; editorial team doesn't know commission rates during testing.
Monthly blog posts with dated test results. Format: date range, comparison table, changes from prior month, raw data (throughput, latency, loss, stability per location).
Why it matters: creates freshness signals, each report is a citable dated data point, providers link to good results (free backlinks), builds a historical archive.
Technical: Data already exists in provider JSONs. Add lastTested date field and build a report template.
"VPN.com Verified" badge — earned, not bought.
| Category | Criteria |
|---|---|
| Trust | Published privacy policy, disclosed jurisdiction/ownership, no-logs claim, independent audit by named firm, transparency report |
| Security | AES-256 encryption, kill switch on all platforms, DNS/IPv6 leak protection, WireGuard or equivalent |
| Value | 30-day minimum money-back guarantee, 5+ simultaneous devices, 24/7 support |
Providers who pass can use the badge on their own sites — every badge is a backlink. Full transparency page at /vpn/verified/.
Endpoint: /api/speedlab.json — generated at build time.
{
"lastUpdated": "2026-04-29",
"testEnvironment": "1 Gbps fiber, US East Coast",
"providers": [
{
"name": "NordVPN",
"rank": 1,
"trustScore": 94,
"speed": { "download": "730 Mbps", "latency": "18 ms" },
"verified": true,
"reviewUrl": "https://www.vpn.com/vpn/nordvpn/"
}
]
}
Open data gets cited. Researchers, journalists, and AI models consume structured JSON.
Already done: llms.txt + llms-full.txt, JSON-LD, clean semantic HTML.
Still needed: Every factual claim should be self-contained and dated. Instead of "NordVPN is fast," write "NordVPN achieved 730 Mbps in VPN.com's April 2026 Speed Lab test, ranking #1 of 10 providers tested."
Content only VPN.com can produce:
Structure answers to match AI queries: claim + evidence + source attribution + date.
llms.txt signals what matters.Don't: buy links, publish thin "best VPN for [city]" farms, inflate scores for affiliates, or claim "industry-leading" without proof.
| # | Item | Effort | Impact |
|---|---|---|---|
| 1 | Methodology page overhaul | 2-3 hrs content | Critical |
| 2 | Brand the scoring system | Content + minor code | High |
| 3 | Affiliate disclosure strengthening | 1 hr content | High |
| 4 | First monthly Speed Lab report | Template + data | High |
| 5 | Add lastTested to provider data | 30 min code | Medium |
| 6 | Verification criteria page | Content + code | High |
| 7 | Static API endpoint | 1 hr code | Medium |
| 8 | Expand to 20 providers | Content + data | Medium |
| 9 | Provider editorial content (9 reviews) | Significant content | High |
| 10 | Wikipedia-grade source quality | Ongoing | Very high |
Start with 1–3. Pure content, no code, and the foundation for everything else.
Authority is earned by doing work nobody else will do, publishing it transparently, and being right consistently over time.
The Speed Lab is the moat. The methodology is the credibility. The monthly reports are the proof. The verification program is the brand. The open data is the distribution.
Consolidated from comparison-supercluster.md · status: parked
VPN.com has 22 individual provider reviews and 13 "best-for" comparison pages. But no provider vs provider comparison content.
When a user asks "NordVPN vs ExpressVPN", there's no page to serve. The user has to read two separate reviews and do the comparison themselves. AI models can't cite a comparison because one doesn't exist.
This is the single biggest content gap identified by ChatGPT's site audit:
"You need provider vs provider matrix, protocol comparisons, use-case comparisons, pricing comparisons. Comparison intent is extremely commercial, extremely AI-native, extremely agent-friendly."
Comparison queries are:
Generate the highest-demand comparisons from our top providers:
| Comparison | Why |
|---|---|
| NordVPN vs ExpressVPN | #1 vs #3 — highest search volume comparison |
| NordVPN vs Surfshark | #1 vs best value — price-conscious buyers |
| NordVPN vs ProtonVPN | #1 vs best privacy — privacy-focused buyers |
| ExpressVPN vs Surfshark | premium vs budget |
| NordVPN vs CyberGhost | #1 vs largest server network |
| Surfshark vs CyberGhost | budget tier comparison |
| NordVPN vs Mullvad | #1 vs most private |
| ExpressVPN vs ProtonVPN | premium tier privacy comparison |
| NordVPN vs PIA | #1 vs most servers |
| Surfshark vs ProtonVPN | budget vs privacy |
/vpn/compare/ — a hub listing all available comparisons with a provider picker (select two providers → see comparison).
A reusable Astro component that takes two provider slugs and renders a structured comparison:
This component makes creating new comparisons trivial — just set the two slugs and write the analysis.
src/content/posts/nordvpn-vs-expressvpn.md
→ category: vpn
→ template: comparison (new)
→ frontmatter: compareProviders: ["nordvpn", "expressvpn"]
→ component auto-generates data table
→ prose analysis written per page
Each comparison page should have: