On this page
- Reading the Audit Output
- The 2026 Search Landscape
- AI Overviews Are Destroying Organic CTR
- Google Rewrites 76% of Title Tags
- AI Overview Citations Are Decoupling From Organic Rank
- CTR Benchmarks by Position (2026)
- Recent Algorithm Updates
- SearchPilot A/B Test Results (2025)
- Threshold Reference
- Dead Page Detection
- Keyword Cannibalization
- How Wire Classifies Each Overlap
- Opportunity Scoring
- Content Quality
- SEO Reword Tiers
- News Freshness
- All Thresholds in One Place
- Signals Wire Tracks
- Title Tags (Zyppy Study: 80,959 titles, 2,370 sites)
- Length
- Separators
- Brackets vs parentheses
- H1 matching reduces rewrites
- Paragraph Length
- Title and H1 Alignment
- External Link Sculpting
- Content Prohibitions (RULE-109)
- Signals Wire Deliberately Ignores
- Keeper Score (Merge Decisions)
- GSC Changes (Late 2025 to Early 2026)
- Sources
- Author Bylines and E-E-A-T
- Lint Rule Reference
- Metadata Rules
- RULE-01: H1 Present
- RULE-02: Single H1
- RULE-03: Heading Hierarchy
- RULE-06: Single Title Tag
- RULE-07: Meta Description
- RULE-08: Minimum Word Count
- RULE-09: Open Graph Tags
- RULE-11: Charset Declaration
- Canonical Rules
- RULE-12: Canonical Tag Present
- RULE-13: Single Canonical
- RULE-15: Canonical in Sitemap
- RULE-16: Duplicate H1
- URL Rules
- RULE-17: Lowercase URLs
- RULE-18: URL Special Characters
- RULE-19: No Underscores
- RULE-20: URL Length
- RULE-21: No Query Parameters
- RULE-22: Trailing Slash Consistency
- Sitemap Rules
- RULE-23: Sitemap Exists
- RULE-25: No Noindex in Sitemap
- RULE-26: No Robots-Blocked in Sitemap
- robots.txt Rules
- RULE-28: robots.txt Exists
- RULE-29: Don't Block CSS/JS
- RULE-30: Sitemap in robots.txt
- RULE-31: Don't Block All Crawlers
- Legal Rules
- RULE-32: Legal Links (Imprint/Privacy)
- Link Rules
- RULE-33: Internal Link Targets Exist
- RULE-34: No Empty Anchor Text
- RULE-36: No Links to Redirect Stubs
- RULE-37: No Mixed Content
- Image Rules
- RULE-40: Image Alt Text
- RULE-41: No Broken Images
- RULE-42: Image Dimensions
- Hreflang Rules
- RULE-43: Valid Hreflang Codes
- RULE-44: Hreflang x-default
- RULE-45: JSON-LD Present / Hreflang Reciprocal
- Structured Data Rules
- RULE-46: Valid JSON-LD
- RULE-47: Recognized JSON-LD Type
- RULE-48: No Broken URLs in JSON-LD
- RULE-55: JSON-LD Recommended Fields
- Indexability Rules
- RULE-50: No Nofollow on Internal Links
- RULE-51: No Raw Video Iframes
- Content Quality Rules
- RULE-52: No Em Dashes
- RULE-67: Numbered Headings
- RULE-71: Article Link Minimum
- RULE-72: No Generic Anchor Text
- RULE-80: Duplicate First Paragraph
- RULE-83: Excessive Bold
- RULE-84: Long List Items
- RULE-85: External Link Minimum
- RULE-86: Description Matches Title
- RULE-87: Outline-Only Content
- RULE-88: Keyword Stuffing
- RULE-89: No Subheadings
- RULE-91: Deep Heading Nesting
- RULE-97: No Prose Content
- Discovery Rules
- RULE-53: Discovery Step IDs
- Component Rules
- RULE-63: Stats Bar Count
- RULE-64: Custom Hero Section Class
- RULE-68: Progress Bar Values
- Performance Rules
- RULE-74: First Image Not Lazy
- RULE-77: Large Images
- Link Quality Rules
- RULE-65: OG Image
- RULE-66: Form Without Handler
- RULE-69: Cross-Language Links
- RULE-70: No Absolute Self-Links
- RULE-75: Click Depth
- RULE-76: Missing Date
- RULE-78: Dead-End Pages
- RULE-81: Conflicting Anchor Text
- RULE-92: Weak Integration
- Accessibility Rules
- RULE-93: Table Without Thead
- RULE-96: No Semantic HTML
- Metadata Quality Rules
- RULE-73: Duplicate Description
- RULE-94: Long Description
- RULE-99: Short Description
- Link/Content Rules
- RULE-101: Tel Format
- RULE-102: PDF Link Indicator
- Page Structure Rules
- RULE-103: Root Index Layout
- RULE-104: Landing Page Components
- RULE-105: Card External Links
- RULE-106: Card Link Consistency
- RULE-107: Landing Page Hero Length
- RULE-108: Markdown Links in Plain-Text Shortcodes
Wire's SEO decisions use specific numbers. Every threshold has a source. Google's public statements are treated as unreliable. The 2024 API leak proved Google uses signals they publicly denied: click data via NavBoost, domain authority, Chrome browsing data. Evidence is ranked: leak-confirmed > A/B tested (SearchPilot) > correlation study (Ahrefs, Zyppy) > case study > expert consensus.
Reading the Audit Output
The audit command produces four sections:
HEALTH. Pass/fail indicators using + (clean) and - (problem found). Each line covers one check category. A clean site shows all + marks.
ACTION. Problems that need fixing, with the exact command to fix them. Only appears when HEALTH shows - indicators.
SEO. Reword opportunities ranked by score, plus content gaps where no page owns a keyword cluster. These are opportunities, not problems.
INFO. Summary statistics: total pages, archived pages, pages without search data.
The 2026 Search Landscape
Three shifts define SEO in 2026. Wire's thresholds account for all of them.
AI Overviews Are Destroying Organic CTR
Seer Interactive studied 3,119 informational queries across 42 organizations (25.1M organic impressions, June 2024 to September 2025). Organic CTR on queries with AI Overviews dropped from 1.76% to 0.61%, a 61% decline. Even queries without AI Overviews saw CTR fall 41%. Paid CTR dropped 68%.
Ahrefs confirmed this in December 2025 with 300,000 keywords: AI Overviews reduce position-1 CTR by 58%, up from 34.5% in April 2025. The impact nearly doubled in eight months.
GrowthSrc tracked 200,000+ keywords and found position 1 CTR dropped from 28% to 19% overall. Positions 6-10 CTR increased 30.63% as users scroll past AI-summarized top results.
Zero-click searches grew from 56% to 69% between May 2024 and May 2025 (Similarweb). AIO queries hit 83% zero-click. Google's experimental AI Mode reaches 93%.
Wire's response: impressions-based opportunity scoring (impressions x (1-CTR)) weights demand over clicks. This matters because a page at position 3 with 1% CTR is performing well by 2026 standards, not underperforming.
Sources: Seer Interactive, September 2025, Ahrefs, December 2025, GrowthSrc, 2025, Similarweb, May 2025.
Google Rewrites 76% of Title Tags
Zyppy's Q1 2025 study found Google now rewrites 76% of title tags, up from 61% two years prior. When rewriting, Google removes ~2.71 words and retains only 35% of the original.
The sweet spot: titles in the 51-60 character range get rewritten ~40% of the time (the lowest rate). Over 60 characters: 76%+ rewrite rate. Over 70 characters: 99.9%.
Wire's response: title length target is 51-55 characters. The _sanitize_content() auto-fix enforces dash separators (not pipes) and strips brackets, both patterns that trigger rewrites. The lint system flags titles outside the range.
Source: Zyppy, Q1 2025.
AI Overview Citations Are Decoupling From Organic Rank
Ahrefs studied 863,000 keywords with 4 million AI Overview URLs in February 2026. Only 38% of AIO citations come from top-10 organic pages, down from 76% in July 2025. 31% of citations come from pages not in the top 100 at all.
Google self-cites 17.42% of all AI Mode citations (SE Ranking, February 2026), up from 5.7% in June 2025. Including YouTube, Google-controlled properties account for ~20% of all sources.
Wire's response: Wire focuses on content quality and topical authority rather than pure position chasing. The enrich pipeline builds pages that answer queries thoroughly, which is what AIO citation selection appears to reward.
Sources: Ahrefs, February 2026, SE Ranking, February 2026.
CTR Benchmarks by Position (2026)
Traditional benchmarks are from before AI Overviews, ChatGPT Search, and Perplexity started intercepting traffic. Here are both the traditional and measured 2026 numbers:
| Position | Traditional CTR | With AI Overviews (2026) | Niche B2B estimate |
|---|---|---|---|
| 1 | ~28% | ~19% (GrowthSrc) | ~2-3% |
| 2 | ~15% | ~12.6% (GrowthSrc) | ~1.5% |
| 3 | ~10% | ~8% est. | ~1% |
| 4-5 | ~5-7% | ~4-5% est. | ~0.5-0.7% |
| 6-10 | ~2-4% | ~3-5% (30% increase) | ~0.3-0.5% |
The niche B2B column reflects what small sites actually see. A position 1 result for "invoice processing benchmark" delivers modest clicks when AI Overviews answer the query directly. Impressions remain a stronger signal than clicks for these sites.
Sources: First Page Sage, 2026, GrowthSrc, 2025.
Recent Algorithm Updates
| Update | Dates | Impact |
|---|---|---|
| March 2025 Core | March 13-27 | Standard core update |
| June 2025 Core | June 30 to July 17 | Standard core update |
| August 2025 Spam | August 26 to September 22 | Targeted scaled content abuse, expired domain abuse, site reputation abuse. Near-immediate impact. |
| December 2025 Core | December 11-29 | Shifted evaluation from "content quality" to "content necessity." Original data and real experience now outperform rewritten generic content. |
| February 2026 Discover Core | Late February | First-ever dedicated Discover update. Reduces clickbait, favors locally relevant and in-depth content. |
| March 2026 Core | Early March, rolling out | ~2 weeks expected |
The December 2025 update is the most relevant for Wire users. It rewards pages with original research, case studies, and first-hand data. Wire's news pipeline and source citation requirements directly support this signal.
Sources: Search Engine Journal algorithm history, Google Search Status Dashboard.
SearchPilot A/B Test Results (2025)
Controlled split tests on live sites. These are the closest thing to causal evidence in SEO.
| Test | Result | Confidence |
|---|---|---|
| H1 keyword alignment with title | +28% traffic | High |
| Pros/cons table on comparison pages | +50% traffic | High |
| Question-based title phrasing | >5% organic sessions uplift | 95% |
| Title with city/clinic at start | +8.5% traffic, ~0.7% CTR increase | 95% |
| Removing embedded maps from location pages | -7% traffic | Significant |
| Airport codes in flight titles (jargon) | -16% traffic | 95% |
Takeaway for Wire users: structure your pages with comparison tables and question-based headings. Avoid jargon in titles. Wire's section structure enforcement (via topic _create.md prompts) makes these patterns repeatable.
Source: SearchPilot case studies.
Threshold Reference
Dead Page Detection
| Parameter | Value | Rationale |
|---|---|---|
| Impression floor | max(10, median * 0.05) | Relative to site size. Adapts to niche vs broad. |
| Minimum page age | 180 days | New pages need time to accumulate signals. |
Evidence: HigherVisibility recommends fewer than 100 impressions over 3-6 months as a pruning trigger. HubSpot pruned 3,000 posts and saw 106% increase in organic views. Wire's relative threshold prevents pruning healthy pages on low-traffic niche sites.
Keyword Cannibalization
| Parameter | Value | Rationale |
|---|---|---|
| Minimum shared keywords | 3 | Avoids noise from coincidental single-keyword overlap. |
| Hard overlap ratio | > 0.4 | 40%+ of the smaller page's keyword identity is duplicated. |
| Hard overlap skew | > 0.7 | One page dominates 70%+ of shared-keyword traffic. |
| Soft overlap ratio | > 0.15 | Low bar catches "Google confused" pairs (50/50 traffic split). |
| Minimum shared impressions | 100 | Below this, overlap is statistical noise. |
Evidence: TheMetaBlog recommends 100 impressions minimum before analyzing cannibalization. First Page Digital uses 30% shared impressions as the threshold. Wire's dual signal (ratio + skew) classifies overlap more precisely than ratio alone.
How Wire Classifies Each Overlap
Wire uses the ratio and skew together to decide what to do. Here is every scenario with a real example from idp-software.com:
| Scenario | Overlap ratio | Traffic skew | What Wire does |
|---|---|---|---|
| Hard overlap | > 0.4 | > 0.7 | Merge weaker page into stronger. Archive donor as index.md.archived. |
| Soft overlap | > 0.15 | any | Differentiate both pages. Reword headings, add cross-links. |
| Google confused | > 0.15 | ~0.5 (50/50) | Same as soft. Neither page wins, both need sharper angles. |
| Cross-topic | any | any | Always differentiate, never merge. A vendor page and a guide page serve different intents. |
| Dead page | any | any | Page below max(10, median * 0.05) impressions and covered by other pages. Archive it. |
| Minor overlap | < 0.15 | any | Reported but no action. The overlap is too small to matter. |
| Single keyword | low | any | Ignored at default --min 3. Catchable with --min 1 for investigation. |
| Three-way | varies | varies | Produces 3 pairwise entries (A-B, A-C, B-C), each resolved independently. |
Hard overlap in practice: /vendors/acme/ and /vendors/acme-ocr/ share 4 of acme-ocr's 5 keywords (ratio = 0.8). Acme gets 85% of shared traffic (skew = 0.85). Wire merges acme-ocr's unique content into acme and archives acme-ocr.
Google confused in practice: /vendors/betacorp/ and /vendors/echocorp/ share 3 keywords with nearly identical impressions and positions. Traffic splits 50/50. Wire differentiates both, rewording headings and adding cross-links so Google can tell them apart.
Opportunity Scoring
| Parameter | Value | Rationale |
|---|---|---|
| Position floor | > 3 | Top 3 already performing well by 2026 standards. |
| Position ceiling | <= 30 | Beyond page 3, content alone will not move the needle. |
| Minimum score | 15 | Filters low-volume noise. |
| Formula | impressions * (1-CTR) | High demand + low capture = opportunity. |
Content Quality
| Parameter | Value | Rationale |
|---|---|---|
| Title length | 51-55 chars | Zyppy: lowest rewrite rate (~40%) at 51-60 chars. |
| Description length | < 160 chars | Google truncation point. |
| Thin content | < 200 words | Floor for flagging stubs, not a target. |
| Source concentration | > 3 links + > 20%, or > 40% + >= 5 total | Dual threshold avoids false positives. |
| Underlinked threshold | < 3 inbound links | SearchPilot orphan page experiment baseline. |
SEO Reword Tiers
| Tier | Coverage | Treatment |
|---|---|---|
| Full | Top 20% | Complete SEO rewrite: headings, body, title, description. |
| Light | Next 30% | Title and description only. High CTR impact, low cost. |
| Skip | Bottom 50% | No action. Low opportunity or already ranking well. |
News Freshness
| Topic type | Default interval | Rationale |
|---|---|---|
| Vendors | 21 days | Fast-moving: M&A, partnerships, product launches. |
| Capabilities | 60 days | Reference content, changes slowly. |
| Guides | 120 days | Evergreen, rarely needs updates. |
Evidence: Siege Media found the average page-one content was updated every 2 years. Wire's intervals are more aggressive because the news pipeline is automated. The cost of checking ($0) is far below the cost of stale content.
All Thresholds in One Place
Every hardcoded number in Wire, where it lives in the code, and why it is that number.
| Parameter | Value | Location | Why |
|---|---|---|---|
| Dead page impressions | max(10, median * 0.05) | chief.py | Relative to site size. A niche site with median 200 uses threshold 10. A broad site with median 5,000 uses 250. |
| Dead page min age | 180 days | chief.py | New pages need 6 months to accumulate signals. |
| Overlap min shared keywords | 3 | db.py | Single-keyword overlaps are noise. Three indicates a real pattern. |
| Hard overlap ratio | > 0.4 | chief.py | 40%+ of the smaller page's keyword identity is duplicated. |
| Hard overlap skew | > 0.7 | chief.py | One page dominates 70%+ of shared traffic. Clear winner. |
| Soft overlap ratio | > 0.15 | chief.py | Low bar catches Google-confused pairs where traffic splits 50/50. |
| Overlap min impressions | 100 | chief.py | Below 100 shared impressions, overlap is statistical noise. |
| Opportunity position floor | > 3 | chief.py | Top 3 is good enough by 2026 standards. |
| Opportunity position ceiling | <= 30 | chief.py | Beyond page 3, content changes alone will not help. |
| Opportunity min score | 15 | chief.py | impressions * (1-CTR). Filters low-volume keywords. Configurable via extra.wire.min_opportunity_score. |
| Title length | 51-55 chars | _style.md, lint.py | Zyppy: lowest rewrite rate (~40%) in the 51-60 range. |
| Description length | < 160 chars | _style.md, lint.py | Google truncation point. |
| Thin content | < 200 words | chief.py | Floor for flagging stubs, not a quality target. |
| Source concentration | > 3 links AND > 20%, or > 40% AND >= 5 total | tools.py | Dual threshold avoids false positives. 2-of-4 links from one domain is normal citation, not concentration. |
| Underlinked | < 3 inbound links | chief.py | SearchPilot orphan page experiment baseline. |
| SEO reword: full tier | Top 20% | chief.py | Complete rewrite: headings, body, title, description. Configurable via extra.wire.reword_tiers.full. |
| SEO reword: light tier | Next 30% | chief.py | Title and description only. High CTR impact, low cost. Configurable via extra.wire.reword_tiers.light. |
| News freshness: vendors | 21 days | chief.py | Fast-moving: M&A, partnerships, product launches. Configurable via extra.wire.refresh_days. |
| News freshness: capabilities | 60 days | chief.py | Reference content, changes slowly. |
| News freshness: guides | 120 days | chief.py | Evergreen, rarely needs updates. |
| GSC data freshness | 28 days | gsc.py | Standard GSC date range. data --force overrides. |
| Max articles per news | 20 | chief.py | Configurable via extra.wire.max_articles. |
| Rate limit delay | 1 second | chief.py | Between API calls. Configurable via extra.wire.rate_limit_delay. |
| Newsweek batch size | 150,000 chars | chief.py | Per extract batch. Configurable via extra.wire.newsweek_batch_chars. |
| GSC API row limit | 25,000 | gsc.py | Maximum per-page query limit from Google. |
| Keeper score weights | 40/30/20/10 | db.py | Impressions / position / clicks / keyword count. Normalized 0-1 per topic. |
| Content gap min pages | 3 | db.py | Keyword ranked by 3+ pages means Google is spreading traffic. |
| Content gap position | > 20 | db.py | Nobody on pages 1-2 means no page owns the topic. |
| Content gap min impressions | 50 | db.py | Low for broad sites, appropriate for B2B niche. |
Signals Wire Tracks
| Signal | Method | Evidence |
|---|---|---|
| Click/dwell behavior | Search data + NavBoost alignment | Leak-confirmed: NavBoost uses 13-month rolling click data, "one of the strongest" ranking signals. |
| Title optimization | 51-55 chars, dash separators, no brackets | Zyppy Q1 2025: 76% rewrite rate, 51-60 chars = lowest at ~40%. |
| Heading structure | H1 validation, hierarchy checks, keyword alignment | SearchPilot: H1 keyword alignment = +28% traffic. |
| Internal linking | Inbound count, broken link detection, crosslinking | SearchPilot: orphan pages underperform. Leak confirms link graph signals. |
| Source diversity | Domain concentration analysis | Reboot Online: pages with outbound links to authoritative sources rank higher. |
| External link sculpting | First 3 dofollow, rest nofollow (masking optional) | Reboot Online: outbound links help. No A/B test shows masking helps. December 2025 update targets uncited content. |
| Content freshness | Date tracking, news integration, staleness detection | December 2025 core update rewards original, current content. |
Title Tags (Zyppy Study: 80,959 titles, 2,370 sites)
Google rewrites 61.6% of page titles. Wire's title rules are calibrated to minimize rewrites.
Length
| Length | Rewrite rate | Wire rule |
|---|---|---|
| 1-5 chars | 96.6% rewritten | RULE-05 refuses <20 chars |
| <20 chars | >50% rewritten | RULE-05 refuses |
| 51-60 chars | 39-42% (lowest) | Target range |
| >60 chars | >76% rewritten | RULE-95 warns |
| >70 chars | 99.9% rewritten | RULE-05 refuses >65 chars |
Separators
| Separator | Google removal rate |
|---|---|
Dash (-) | 19.7% removed |
Pipe (\|) | 41% removed |
What Wire enforces: RULE-05 auto-converts pipes to dashes in _sanitize_content().
Brackets vs parentheses
| Symbol | Google removal rate |
|---|---|
Brackets [] | 32.9% removed |
Parentheses () | 19.7% removed |
Use parentheses if you need to emphasize text in titles.
H1 matching reduces rewrites
When H1 matches the title tag, Google dramatically reduces rewriting. Pages with numbers in both title and H1 kept the number 97.3% of the time (vs 74.2% when only in title).
Wire does NOT flag identical title and H1. This is correct behavior per evidence.
Sources: Zyppy: Google Rewrites 61% of Title Tags, Zyppy: 10 Ways to Stop Google Rewriting Titles.
Paragraph Length
Paragraph length is a readability signal, not a ranking signal.
| Claim | Evidence | Source |
|---|---|---|
| Google ranks based on paragraph length | False | John Mueller: "Word count is not a ranking factor" |
| Shorter paragraphs improve web readability | True | NNG: 79% of web users scan, not read |
| Uniform paragraph length signals AI | Weak | GPTZero measures burstiness, but Pangram Labs (arXiv 2402.14873) shows it fails on modern models |
| A/B test shows paragraph length impacts rankings | No evidence found | No SearchPilot or published test |
| SEO tools check paragraph length | Yes (readability only) | Yoast flags >150 words. Semrush flags based on Flesch score. Neither ties it to rankings. |
Key insight: The signal is uniformity (all paragraphs same length), not shortness. Short paragraphs are recommended by Google's own style guide (5-6 sentences max, single-sentence paragraphs acceptable). The problem is when EVERY paragraph is the same length, which is a statistical tendency of AI output, not a quality defect.
What matters for quality: One idea per paragraph. Vary length naturally. Don't split coherent ideas across paragraphs just to hit a word count. Don't pad short paragraphs just to avoid a uniform pattern.
PRO (why short paragraphs are fine):
- Google Developer Style Guide: "5-6 sentences max. Single-sentence paragraphs are OK."
- NNG: How Users Read on the Web: 79% scan. Short paragraphs aid scanning.
- Cognitive load research: working memory handles 4-7 chunks before degrading.
CON (why enforcing paragraph length is problematic):
- Pangram Labs (arXiv): burstiness-based detection fails on ESL writers, historical texts, and GPT-4 output.
- John Mueller: word count is not a ranking factor at any granularity.
Title and H1 Alignment
Wire's opinionated stance: title and H1 should match keywords. Identical is fine. Different topics is not.
| Finding | Source | Confidence |
|---|---|---|
| H1 keyword alignment with title -> +28% traffic | SearchPilot A/B split test | High |
| Matching H1 to title reduces Google rewrites 61% -> 20% | Zyppy (80,959 titles, 2,370 sites) | High |
| No ranking penalty or bonus for identical title/H1 | Google (Gary Illyes) | Official |
| H1 tags are "useful but not critical" for rankings | Google (John Mueller) | Official |
What Wire enforces:
- RULE-100: title and H1 must share >30% of keywords (aligned intent)
- RULE-04: target query keyword must appear in H1 or title
What Wire does NOT flag:
- Identical title and H1 is correct behavior, not a problem
- RULE-82 was removed (#155) after evidence showed it penalized the right behavior
Sources: SearchPilot title/H1 tests, Zyppy title rewrite study, Google on H1 matching title.
External Link Sculpting
Wire treats outbound links in two tiers: the first 3 external links per page get full dofollow treatment (visible to Google, passes PageRank), links 4+ get rel="nofollow noopener" with target="_blank" (visible to Google but no PageRank flow).
Wire does not support link masking (javascript:void(0) with JavaScript click handlers). The evidence is clear that masking harms more than it helps:
- Reboot Online (2016, replicated 2020): pages linking to authoritative sources ranked higher than pages with no outbound links.
- Google API leak (2024): no signal that hiding external links helps rankings.
- December 2025 core update: Google targets "uncited or verifiably false claims". Masking citations makes pages look unsourced.
- Accessibility: masked links break screen readers, keyboard navigation, and violate WCAG.
Sources: Reboot Online outbound link experiment, iPullRank API leak analysis, Orbit Media outbound link analysis.
Content Prohibitions (RULE-109)
Wire enforces customer-declared topic prohibitions via the ## Forbidden Topics section in docs/_styleguide.md. Any page whose title, H1, description, or first 500 body words mentions a forbidden topic triggers RULE-109 and the build is refused.
Why this is a build error, not a warning:
- Customers who list forbidden topics have already decided. A page that drifts into a forbidden topic is a retraction waiting to happen. Catching it at build time is cheaper than retracting a live URL and losing the inbound links.
- Wire's AI pipeline can drift into adjacent topics via news items or prompt injection. Helm & Nagel reported generic "KI-Chatbots" pages from the
newscommand. A content-level gate is the last line of defense. _overruled: [RULE-109]is rejected. The whole point is that the customer wants the failure to be loud and unskippable. If you need to cover a topic, remove the bullet from_styleguide.mdfirst.
Match semantics:
- Wire parses
## Forbidden Topicsfrom_styleguide.mdat build start. - For each bullet, Wire strips parenthetical descriptions and
Competitor:/Brand:/Vendor:label prefixes. - Case-insensitive substring match on the full key, then on hyphenated or digit-containing tokens inside the key. A bullet like
Generic KI-Chatbotsstill refuses a page titledWhy KI-Chatbots MatterbecauseKI-Chatbotsis a hyphenated token. - Plain English modifier words ("Generic", "Basic") stay bound to the full phrase to avoid false-positives on prose like "generic framework".
See Writing for Wire for styleguide syntax and real forbidden-topics examples.
Signals Wire Deliberately Ignores
| Signal | Why ignored | Evidence |
|---|---|---|
| Readability/Flesch score | Zero correlation with rankings. Clarity matters; grade level does not. | Portent 750K pages. Ahrefs 15K keywords. |
| Keyword density | NavBoost shifted ranking weight to user behavior signals. Topical coverage matters, not word repetition. | 2024 Google API leak. |
| Image alt text | Ranking factor for Google Images only, not web search. Accessibility benefit, not SEO lever. | Moz study. Leak mentions imageQuality but no alt-text ranking connection. |
| Core Web Vitals | Weak correlation with rankings. A gate, not a growth lever. Theme/hosting concern, not content. | Perficient/Eric Enge study. Leak confirms it exists but weighted far below content/links/clicks. |
| Schema/structured data | No direct ranking change. Feeds entity signals indirectly via CTR. Theme responsibility. | SearchPilot A/B: no ranking change. |
| Canonical tags | No evidence of ranking issues on static sites with stable URLs. | Build system handles automatically. |
Keeper Score (Merge Decisions)
When merging overlapping pages, Wire selects the keeper using a weighted score:
score = 0.4 * norm(impressions) # Demand signal
+ 0.3 * norm(position) # Ranking strength
+ 0.2 * norm(clicks) # User preference
+ 0.1 * norm(keyword_count) # Topical breadth
Each component is normalized to 0-1 across all pages in the topic. The page with the higher score keeps its URL. The other page's unique content is absorbed and its index.md is renamed to index.md.archived.
GSC Changes (Late 2025 to Early 2026)
Two relevant additions to Google Search Console:
Branded vs. non-branded query filter (November 2025). Uses AI-assisted classification including brand name in all languages, typos, and unique products. Wire's keyword analysis already separates brand queries from organic opportunities through impression ratio scoring.
AI-powered natural language configuration (February 2026). Performance reports now accept natural language queries. This does not affect Wire's API integration, which reads raw data directly.
Source: Google Search Central Blog, November 2025.
Sources
All evidence used in Wire's threshold decisions:
- Zyppy. 81K title tag study (Q1 2025), 23M link analysis. zyppy.com
- SearchPilot. Controlled A/B split tests on live sites. searchpilot.com
- Seer Interactive. 3,119 queries, 42 organizations, AIO CTR impact. seerinteractive.com
- Ahrefs. 300K keyword AIO study (December 2025), 863K keyword citation study (February 2026). ahrefs.com
- GrowthSrc. 200K+ keyword CTR study. growthsrc.com
- Backlinko. 15K keyword correlation study, SEO pricing survey. backlinko.com
- Portent. 750K page readability analysis. Zero correlation with rankings.
- HubSpot. Pruned 3,000 posts, 106% organic traffic increase.
- Google API Leak (2024). Confirmed NavBoost, domain authority, Chrome data signals.
- Perficient/Eric Enge. Core Web Vitals: weak correlation, "gate not growth lever."
- Reboot Online. Outbound links correlation experiment (2016, replicated 2020). Pages with outbound links rank higher. rebootonline.com
- Orbit Media. Top-ranking pages have 56-171 outbound links on average. orbitmedia.com
- La Lutine du Web. Link masking breaks accessibility (WCAG violations). lalutineduweb.fr
- SE Ranking. Google self-citation study, February 2026. seranking.com
Author Bylines and E-E-A-T
Google's E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) guidelines increasingly weight visible authorship signals. Wire enforces author profiles and renders them as structured data.
What Wire does:
- JSON-LD Article schema includes
author.name,author.jobTitle,author.sameAs,author.url - Visible byline card on every article (photo, name, role, bio, LinkedIn)
reviewer:frontmatter for transparent AI/human co-authorship- Multiple authors render as a JSON-LD array (Google supports this per schema.org)
- RULE-80 skips author byline paragraphs (not duplicate content)
What Google says:
- JSON-LD is the primary way Google reads author metadata, not HTML structure
author.urlshould link to a page that uniquely identifies the author- Visible bylines are good for E-E-A-T (shows real human authorship to readers)
- Google does NOT penalize visible author bios as duplicate content
Sources:
- Google Article structured data
- Google structured data policies
- Google Publisher Center best practices
Related: internal linking and title rewriting.
Lint Rule Reference
Every Wire lint rule with evidence, rationale, and scope.
Metadata Rules
RULE-01: H1 Present
Every page needs exactly one H1. Google uses H1 as a primary ranking signal and often copies it into the title tag when rewriting. Pages without H1 lack a clear topic signal.
PRO Google's 2024 API leak confirmed titlematchScore compares title to H1. Zyppy found titles matching H1 get rewritten only 20.6% vs 61.6% when mismatched.
CON Single-page apps may render H1 via JavaScript. Wire builds static HTML, so this does not apply.
What Wire enforces: Warning when no H1 element found in rendered HTML.
What Wire does NOT flag: Pages with exactly one H1 (the expected case).
RULE-02: Single H1
Multiple H1 elements dilute the page topic signal. Google treats the first H1 as the primary heading; additional H1s create ambiguity about page intent.
PRO HTML5 spec allows multiple H1 in sectioning elements, but Google's John Mueller confirmed in 2022 that a single H1 is "great for accessibility and SEO."
CON HTML5 outline algorithm supports multiple H1. However, no browser implements the outline algorithm, and screen readers read H1 count literally.
What Wire enforces: Warning when more than one H1 element exists.
What Wire does NOT flag: Pages with exactly one H1.
RULE-03: Heading Hierarchy
Skipping heading levels (H1 to H3 without H2) breaks document outline for screen readers and loses semantic structure that search engines use to understand content hierarchy.
PRO WCAG 2.1 Success Criterion 1.3.1 requires meaningful heading structure. Google uses heading hierarchy to understand content sections.
CON Visual design sometimes wants different heading sizes. CSS should handle visual sizing, not heading level changes.
What Wire enforces: Warning when heading levels are skipped (e.g., H2 followed by H4).
What Wire does NOT flag: Correct sequential heading levels.
RULE-06: Single Title Tag
Multiple title tags create ambiguity. Browsers use the first one; Google may use any of them or rewrite entirely.
PRO HTML spec defines exactly one title element per document. Multiple titles are a parsing error.
CON None. Multiple title tags is always a bug.
What Wire enforces: Warning when more than one title element exists.
What Wire does NOT flag: Pages with exactly one title tag.
RULE-07: Meta Description
Meta descriptions appear in search snippets. Missing or wrong-length descriptions get rewritten by Google, losing control over how pages appear in SERPs.
PRO Ahrefs study of 192,000 pages: Google rewrites descriptions 62.78% of the time. Optimal length: 70-155 characters.
CON Google rewrites descriptions regardless. But well-written descriptions are kept more often and improve CTR.
What Wire enforces: Warning when meta description is missing or outside 70-155 character range.
What Wire does NOT flag: Descriptions within the optimal range.
RULE-08: Minimum Word Count
Stub pages with fewer than 50 words provide no value to searchers. Google's Helpful Content Update (2023) demotes thin content across entire sites.
PRO Ahrefs found the average top-10 page has 1,447 words. Pages under 200 words rarely rank for competitive terms.
CON Some pages (contact, legal) are legitimately short. Wire allows suppression via _overruled.
What Wire enforces: Warning when body content has fewer than 50 words.
What Wire does NOT flag: Pages with sufficient content.
RULE-09: Open Graph Tags
OG tags control social media previews. Missing tags mean platforms auto-generate previews, often poorly.
PRO Facebook, LinkedIn, Twitter all use OG tags. Pages shared without OG tags get generic previews with low CTR.
CON Not all pages are shared on social media. But the cost of adding OG tags is near zero.
What Wire enforces: Warning when og:title or og:description is missing.
What Wire does NOT flag: Pages with complete OG tags.
RULE-11: Charset Declaration
Charset must be declared in the first 1024 bytes of HTML. Late or missing charset causes encoding issues and can trigger security vulnerabilities (UTF-7 attacks).
PRO HTML spec requires charset in first 1024 bytes. Google's rendering service respects this for correct text processing.
CON None. Missing charset is always a bug in 2026.
What Wire enforces: Warning when charset meta is not in first 1024 bytes.
What Wire does NOT flag: Pages with correct charset declaration.
Canonical Rules
RULE-12: Canonical Tag Present
Canonical tags tell Google which version of a page is authoritative. Without canonicals, duplicate content across HTTP/HTTPS, www/non-www, or trailing slash variants competes with itself.
PRO Google's John Mueller: "canonical is one of the strongest signals we look at for duplicate content."
CON Self-referencing canonicals are debated. Google says they're "good practice." Some SEOs say unnecessary. Wire includes them for safety.
What Wire enforces: Warning when canonical link element is missing.
What Wire does NOT flag: Pages with a canonical tag.
RULE-13: Single Canonical
Multiple canonical tags create ambiguity. Google picks one but may choose wrong.
PRO HTML spec and Google documentation both specify exactly one canonical per page.
CON None. Multiple canonicals is always a bug.
What Wire enforces: Warning when more than one canonical tag exists.
What Wire does NOT flag: Pages with exactly one canonical.
RULE-15: Canonical in Sitemap
Pages declaring a canonical URL that differs from their sitemap entry send conflicting signals. Google must choose which to trust.
PRO Google's documentation: canonical URL and sitemap URL should match for clear indexing signals.
CON During migrations, temporary mismatches may occur. Wire flags them to prevent permanent drift.
What Wire enforces: Warning when canonical URL is not found in sitemap.xml.
What Wire does NOT flag: Pages where canonical matches sitemap entry.
RULE-16: Duplicate H1
Two pages sharing the same H1 compete for identical queries. Google must choose one; the other loses.
PRO Ahrefs found 65% of pages with duplicate titles/H1s cannibalize each other's rankings.
CON Hub pages may legitimately share H1 with their child. Wire checks exact match only.
What Wire enforces: Warning when H1 text matches another page's H1.
What Wire does NOT flag: Unique H1s across the site.
URL Rules
RULE-17: Lowercase URLs
Mixed-case URLs create duplicate content. /About/ and /about/ are different URLs but same content.
PRO Google treats URLs as case-sensitive. Mixed case doubles crawl budget and splits link equity.
CON None. Lowercase URLs are universal best practice.
What Wire enforces: Warning when URL path contains uppercase characters.
What Wire does NOT flag: All-lowercase URL paths.
RULE-18: URL Special Characters
Spaces and special characters in URLs break in some browsers, email clients, and sharing tools. They also look unprofessional.
PRO RFC 3986 defines safe URL characters. Spaces must be percent-encoded, which creates ugly URLs.
CON None for content URLs. API endpoints may use query params.
What Wire enforces: Warning when URL path contains spaces or special characters.
What Wire does NOT flag: Clean URL paths with only alphanumeric, hyphens, and slashes.
RULE-19: No Underscores
Google treats hyphens as word separators but underscores as word joiners. setup_guide is one word to Google; setup-guide is two.
PRO Google's Matt Cutts (2011, still valid): "Use hyphens, not underscores." Confirmed by current documentation.
CON Legacy systems may use underscores. Changing URLs requires redirects.
What Wire enforces: Warning when URL path contains underscores.
What Wire does NOT flag: URLs using hyphens as separators.
RULE-20: URL Length
URLs over 115 characters get truncated in search results and are harder to share. Extremely long URLs may hit server limits.
PRO Backlinko study: average top-10 URL is 66 characters. URLs over 100 chars see declining CTR in SERPs.
CON Some deep navigation structures require longer paths. Wire's threshold (115) is generous.
What Wire enforces: Warning when URL exceeds 115 characters.
What Wire does NOT flag: URLs within length limit.
RULE-21: No Query Parameters
Content pages should not use query parameters. Parameters create infinite URL variations and waste crawl budget.
PRO Google Search Central: "Use clean URLs without unnecessary parameters." Parameters cause duplicate content and crawl budget issues.
CON Search pages legitimately use parameters. Wire excludes utility pages.
What Wire enforces: Warning when canonical page URL contains query parameters.
What Wire does NOT flag: Clean URLs without parameters.
RULE-22: Trailing Slash Consistency
Inconsistent trailing slashes (linking to /page and /page/) create duplicate URLs. ERROR because broken links directly harm users and SEO.
PRO Google treats /page and /page/ as different URLs. Inconsistent slashes split link equity.
CON None. Trailing slash consistency is fundamental URL hygiene.
What Wire enforces: ERROR when internal links use inconsistent trailing slashes.
What Wire does NOT flag: Consistently slashed internal links.
Sitemap Rules
RULE-23: Sitemap Exists
Sitemap.xml helps Google discover and prioritize pages. Sites without sitemaps rely entirely on crawling, which misses deep or unlinked pages.
PRO Google's Gary Illyes: "Sitemaps are one of the primary sources of URLs for us."
CON Small sites (under 500 pages) with good internal linking may not need sitemaps. Wire generates them automatically.
What Wire enforces: Warning when neither sitemap.xml nor sitemap-index.xml exists at site root.
What Wire does NOT flag: Sites with a sitemap file present.
RULE-25: No Noindex in Sitemap
Listing noindex pages in sitemap sends conflicting signals. The sitemap says "index this"; the page says "don't."
PRO Google documentation: "Don't include noindex pages in your sitemap."
CON None. This is always a configuration error.
What Wire enforces: Warning when a noindexed page appears in sitemap.xml.
What Wire does NOT flag: Sitemaps with only indexable pages.
RULE-26: No Robots-Blocked in Sitemap
Pages blocked by robots.txt but listed in sitemap can still appear in search results (with "No information available" snippet), wasting a SERP slot.
PRO Google: "If a URL is blocked by robots.txt, it cannot be crawled, but it might still be indexed."
CON None. Robots-blocked pages in sitemaps is always a mistake.
What Wire enforces: Warning when robots.txt-blocked pages appear in sitemap.
What Wire does NOT flag: Consistent robots/sitemap configuration.
robots.txt Rules
RULE-28: robots.txt Exists
Missing robots.txt causes a 404 on every crawl check, wasting crawl budget. Google crawls robots.txt before every crawl session.
PRO Google crawls robots.txt frequently. A 404 wastes a request per crawl session.
CON A missing robots.txt with default allow-all is functionally equivalent. But the 404 waste adds up.
What Wire enforces: Warning when robots.txt is missing from site root.
What Wire does NOT flag: Sites with a robots.txt file.
RULE-29: Don't Block CSS/JS
Blocking CSS/JS in robots.txt prevents Google from rendering pages correctly. Google needs CSS and JS to understand layout and content visibility.
PRO Google's Mobile-Friendly Test specifically checks CSS/JS accessibility. Blocking them causes rendering failures.
CON None. Blocking CSS/JS from crawlers is always harmful for rendering-based indexing.
What Wire enforces: Warning when robots.txt blocks CSS or JS paths.
What Wire does NOT flag: robots.txt that allows CSS and JS crawling.
RULE-30: Sitemap in robots.txt
robots.txt should include a Sitemap directive to help crawlers find the sitemap without guessing.
PRO Google documentation: "You can specify the location of the sitemap using a robots.txt file."
CON Google also discovers sitemaps via Search Console. But robots.txt is a belt-and-suspenders approach.
What Wire enforces: Warning when robots.txt has no Sitemap directive.
What Wire does NOT flag: robots.txt with Sitemap line.
RULE-31: Don't Block All Crawlers
robots.txt with Disallow: / blocks all crawlers. This is usually a leftover from staging that accidentally goes to production.
PRO A Disallow: / on production deindexes the entire site within days.
CON Staging sites should block crawlers. Wire checks the built output, not staging.
What Wire enforces: Warning when robots.txt blocks all paths for all user agents.
What Wire does NOT flag: Selective or absent disallow rules.
Legal Rules
RULE-32: Legal Links (Imprint/Privacy)
EU/German law requires imprint and privacy policy links on every page. Missing links risk fines under GDPR and TMG.
PRO German TMG Section 5 requires imprint. GDPR Article 13 requires privacy notice. Fines up to 4% of annual revenue.
CON Non-EU sites may not need these. Wire is opinionated: legal compliance is not optional.
What Wire enforces: Warning when site lacks imprint or privacy links. Skips redirect stub pages on multi-lang root.
What Wire does NOT flag: Sites with both legal page links present.
Link Rules
RULE-33: Internal Link Targets Exist
Links pointing to pages that don't exist are broken. ERROR because 404 links directly harm user experience and waste link equity.
PRO Ahrefs: broken internal links are the #1 technical SEO issue. Google's crawl budget is wasted on 404s.
CON None. Broken links are always bugs.
What Wire enforces: ERROR when an internal link target file does not exist in the built output.
What Wire does NOT flag: Links to existing pages.
RULE-34: No Empty Anchor Text
Links with empty anchor text pass zero SEO value. Screen readers announce them as "link" with no context.
PRO Google uses anchor text as a relevance signal. Empty anchors waste that signal entirely.
CON Icon-only links (e.g., social media icons) may have empty text. Wire checks <a> text content.
What Wire enforces: Warning when internal link has empty anchor text.
What Wire does NOT flag: Links with descriptive text.
RULE-36: No Links to Redirect Stubs
Internal links pointing to redirect pages waste a hop. Users and crawlers must follow the redirect, adding latency and losing link equity.
PRO Google passes ~85-99% of PageRank through 301 redirects, but direct links are always better.
CON During migrations, temporary redirect links may exist. Wire flags them to prevent permanence.
What Wire enforces: ERROR when internal link points to a known redirect stub page.
What Wire does NOT flag: Direct links to final destination pages.
RULE-37: No Mixed Content
HTTP resources on HTTPS pages trigger browser warnings and are blocked by modern browsers. ERROR because it directly breaks page rendering.
PRO All modern browsers block mixed content by default. Chrome shows a "Not Secure" warning.
CON None. Mixed content is always a bug in 2026.
What Wire enforces: ERROR when HTTPS page references HTTP resources.
What Wire does NOT flag: Pages with all-HTTPS resources.
Image Rules
RULE-40: Image Alt Text
Images without alt text are invisible to screen readers and search engines. Google Image Search relies on alt text for ranking.
PRO WCAG 2.1 Level A requires alt text. Google explicitly uses alt text for image search ranking.
CON Decorative images should have alt="" (empty, not missing). Wire checks for the attribute's presence.
What Wire enforces: Warning when images lack alt attribute.
What Wire does NOT flag: Images with alt text (including empty alt for decorative images).
RULE-41: No Broken Images
Images with missing source files show broken image icons. ERROR because it directly harms user experience.
PRO Broken images make pages look unprofessional and harm trust signals.
CON None. Missing image files are always bugs.
What Wire enforces: ERROR when local image src file does not exist.
What Wire does NOT flag: Images with valid source files.
RULE-42: Image Dimensions
Images without width/height cause layout shift (CLS), a Core Web Vital. High CLS hurts both user experience and rankings.
PRO Google's CLS metric directly affects search rankings via Core Web Vitals. Explicit dimensions prevent layout shift.
CON CSS-sized components (author bylines, sidebar cards, logo clouds) handle dimensions via CSS. Wire skips these.
What Wire enforces: Warning when images lack explicit width and height attributes. Skips .author-byline, .sidebar-card, .logo-cloud images.
What Wire does NOT flag: Images with dimensions or CSS-controlled components.
Hreflang Rules
RULE-43: Valid Hreflang Codes
Invalid hreflang codes are silently ignored by Google. The alternate page never gets associated.
PRO Google documentation specifies BCP 47 language codes. Invalid codes waste hreflang implementation effort.
CON None. Invalid language codes are always bugs. x-default is a valid special value (not BCP 47).
What Wire enforces: Warning when hreflang uses an unrecognized language code. Skips x-default.
What Wire does NOT flag: Valid BCP 47 codes and x-default.
RULE-44: Hreflang x-default
Multi-language pages without x-default lose the fallback signal. Users in unsupported regions get no language match.
PRO Google documentation: "Use x-default to specify a default page for unmatched user languages."
CON Single-language sites don't need hreflang at all. Wire only checks when hreflang tags exist.
What Wire enforces: Warning when hreflang tags exist but x-default is missing.
What Wire does NOT flag: Pages with x-default or pages without hreflang.
RULE-45: JSON-LD Present / Hreflang Reciprocal
Pages need structured data for rich results. Hreflang alternates must link back (reciprocal) or Google ignores them.
PRO Google requires reciprocal hreflang for confirmation. One-way hreflang is silently dropped.
CON Some page types (utility, legal) may not need JSON-LD. Wire checks for presence, not completeness.
What Wire enforces: Warning when no JSON-LD block exists. Warning when hreflang target doesn't link back.
What Wire does NOT flag: Pages with JSON-LD and reciprocal hreflang.
Structured Data Rules
RULE-46: Valid JSON-LD
Invalid JSON in JSON-LD scripts means Google ignores all structured data on the page. Silent failure.
PRO Google's Rich Results Test rejects invalid JSON. No fallback parsing.
CON None. Invalid JSON is always a bug.
What Wire enforces: Warning when JSON-LD script contains invalid JSON.
What Wire does NOT flag: Valid JSON-LD blocks.
RULE-47: Recognized JSON-LD Type
Unrecognized @type values in JSON-LD are silently ignored. Google only processes known schema.org types.
PRO Google supports ~30 schema.org types. Unknown types produce no rich results.
CON Schema.org defines hundreds of types. Google only uses a subset.
What Wire enforces: Warning when @type is not a recognized schema.org type.
What Wire does NOT flag: Known types like Article, Organization, FAQPage, etc.
RULE-48: No Broken URLs in JSON-LD
Structured data with 404 URLs (author pages, organization logos) fails Google's validation. ERROR because it silently breaks rich results.
PRO Google Rich Results Test validates URLs in structured data. Broken URLs cause rejection.
CON None. Broken URLs in structured data are always bugs.
What Wire enforces: ERROR when JSON-LD contains local URLs that don't resolve.
What Wire does NOT flag: JSON-LD with valid URL references.
RULE-55: JSON-LD Recommended Fields
Google documents recommended fields per @type. Missing recommended fields reduce rich result eligibility.
PRO Google's documentation explicitly lists required and recommended fields. Missing recommended fields limit rich result display.
CON "Recommended" means optional. But including them costs nothing and improves SERP appearance.
What Wire enforces: Warning when JSON-LD lacks Google-recommended fields for its declared @type.
What Wire does NOT flag: JSON-LD with complete recommended fields.
Indexability Rules
RULE-50: No Nofollow on Internal Links
Internal nofollow links waste link equity. PageRank flows to the nofollowed URL but is discounted.
PRO Google's Gary Illyes confirmed: nofollow on internal links wastes link equity that could flow to other pages.
CON Login pages or user-generated content may warrant nofollow. Wire checks content pages only.
What Wire enforces: Warning when internal links use rel="nofollow".
What Wire does NOT flag: Internal links without nofollow.
RULE-51: No Raw Video Iframes
Raw YouTube/Vimeo iframes load third-party cookies without consent. GDPR violation in the EU.
PRO GDPR requires consent before loading third-party tracking. YouTube iframes set cookies immediately. Fines up to 4% of revenue.
CON Privacy-mode embeds (youtube-nocookie.com) may be acceptable. Wire flags all raw iframes.
What Wire enforces: ERROR when raw YouTube or Vimeo iframes are found.
What Wire does NOT flag: Wire's !yt[...] shortcode (generates consent-aware embeds).
Content Quality Rules
RULE-52: No Em Dashes
Em dashes and spaced hyphens are a known AI writing pattern. Human writers use commas, semicolons, or periods. Google's Helpful Content system flags AI-generated patterns.
PRO Analysis of 10,000 AI-generated articles: 94% use em dashes. Human business writing uses them <5% of the time.
CON Em dashes are valid English punctuation. But their overuse in 2024-2026 content signals AI generation.
What Wire enforces: Warning when body text contains em dashes or double hyphens. Skips <a> and <cite> text.
What Wire does NOT flag: Text using commas, semicolons, colons, or periods instead.
RULE-67: Numbered Headings
Headings prefixed with numbers ("1. Introduction", "3. Methods") look like textbook outlines, not professional publications.
PRO Numbered headings are an AI writing pattern. Professional publications use thematic headings.
CON Tutorial-style content may legitimately use numbered steps. Wire issues a warning, not error.
What Wire enforces: Warning when headings start with numbered prefixes.
What Wire does NOT flag: Thematic headings without number prefixes.
RULE-71: Article Link Minimum
Articles need at least 2 sibling links, 1 topic index link, and 1 external link. Isolated articles provide poor navigation and lack source credibility.
PRO Google's E-E-A-T framework values citations. Internal links build topic clusters. External links show research.
CON Very short or new articles may not need many links. Wire only checks .article-body on article layouts.
What Wire enforces: Warning when article falls below link minimums. Skips news and non-article pages.
What Wire does NOT flag: Well-linked articles meeting minimum thresholds.
RULE-72: No Generic Anchor Text
"Click here", "read more", "here" as anchor text wastes the strongest on-page SEO signal. Google uses anchor text to understand what the target page is about.
PRO Google's Search Quality Evaluator Guidelines: anchor text should describe the target. Moz study: descriptive anchors improve target page rankings.
CON None. Generic anchors are always inferior to descriptive ones.
What Wire enforces: Warning when anchor text is generic (click here, here, read more, learn more, this, link).
What Wire does NOT flag: Descriptive anchor text.
RULE-80: Duplicate First Paragraph
Identical opening paragraphs across pages signal template-generated content. Google's Helpful Content Update targets this pattern.
PRO Duplicate first paragraphs = zero unique opening value. Google may classify as thin/template content.
CON Some pages may share a valid standardized introduction. Wire skips author byline paragraphs.
What Wire enforces: Warning when first paragraph text matches another page exactly.
What Wire does NOT flag: Unique opening paragraphs.
RULE-83: Excessive Bold
More than 10% bold text is an AI writing pattern. Human writers use bold sparingly for emphasis; AI tools bold every key term.
PRO Analysis of AI vs human content: AI-generated articles average 12-15% bold text. Human articles: 2-4%.
CON Reference pages with many proper nouns may legitimately use more bold. Suppressive via _overruled.
What Wire enforces: Warning when bold text exceeds 10% of body content.
What Wire does NOT flag: Normal bold usage under 10%.
RULE-84: Long List Items
List items exceeding 50 words are paragraphs disguised as bullets. This pattern hides AI-generated prose in list format.
PRO UX research: list items over 2 lines are not scanned, defeating the purpose of lists. Also an AI writing pattern.
CON Some reference content uses detailed list items. Wire warns, doesn't error.
What Wire enforces: Warning when list items exceed 50 words.
What Wire does NOT flag: Concise list items.
RULE-85: External Link Minimum
Pages with 500+ words and zero external links lack source credibility. E-E-A-T requires evidence and attribution.
PRO Reboot Online controlled experiment: pages with outbound links to authority sources ranked higher than identical pages without.
CON Some pages (product pages, tools) may not need external citations. Wire only checks 500+ word articles.
What Wire enforces: Warning when a substantial page has no external links.
What Wire does NOT flag: Pages with at least one external link, or pages under 500 words.
RULE-86: Description Matches Title
Meta descriptions that start with the title text are lazy metadata. They waste SERP snippet space repeating what the title already says.
PRO SERP snippets show title above description. Repeating title text in description wastes the only space for a unique value proposition.
CON None. Starting descriptions with the title is always suboptimal.
What Wire enforces: Warning when description starts with title text.
What Wire does NOT flag: Descriptions with unique opening text.
RULE-87: Outline-Only Content
Pages with only headings and no prose between them are outlines, not content. They provide no value to searchers.
PRO Google's Helpful Content Update explicitly targets pages with no depth. Heading-only pages are the extreme case.
CON Table of contents pages may be heading-heavy. Wire checks for zero prose between headings.
What Wire enforces: Warning when page has headings with no paragraph text between them.
What Wire does NOT flag: Pages with prose content under headings.
RULE-88: Keyword Stuffing
A single word appearing in more than 5% of body text signals keyword stuffing. Google's SpamBrain detects this pattern.
PRO Google's spam policies explicitly prohibit "unnaturally high keyword density." SpamBrain uses keyword frequency as a spam signal.
CON Pages about a specific product naturally repeat the product name. Suppressible via _overruled.
What Wire enforces: Warning when any single word exceeds 5% of body text.
What Wire does NOT flag: Natural keyword distribution.
RULE-89: No Subheadings
Articles with 300+ words and no H2 headings lack structure. Readers and search engines both benefit from sectioned content.
PRO Google's featured snippets frequently target H2 sections. Unstructured long-form content rarely wins featured snippets.
CON Very short articles (under 300 words) don't need subheadings. Wire respects this threshold.
What Wire enforces: Warning when 300+ word articles have no H2 elements.
What Wire does NOT flag: Short articles or articles with subheadings.
RULE-91: Deep Heading Nesting
Heading depth beyond H4 indicates over-structured content. Deep nesting makes content harder to scan and signals document complexity.
PRO UX research: readers scan H2 and H3 headings. H5/H6 are rarely noticed and add visual noise.
CON Technical documentation may use deep heading structures. Wire warns at H5+.
What Wire enforces: Warning when headings go deeper than H4.
What Wire does NOT flag: Heading structures using H1-H4.
RULE-97: No Prose Content
Article pages with no paragraph elements contain no readable prose. These are typically stub pages or CSS-only layouts.
PRO Google's Helpful Content system requires substantive text content. Pages without <p> tags have no indexable prose.
CON Some interactive pages use other elements for text. Wire checks article layouts specifically.
What Wire enforces: Warning when article page has zero <p> elements.
What Wire does NOT flag: Pages with paragraph elements.
Discovery Rules
RULE-53: Discovery Step IDs
Discovery step {#id} values must match article H2 anchor IDs. Mismatched IDs break the discovery reading flow.
PRO Wire's discovery system links steps to article sections via anchor IDs. Mismatches create dead links.
CON None. Mismatched step IDs are always bugs.
What Wire enforces: Warning when :::step{#id} doesn't match an H2 anchor in the article.
What Wire does NOT flag: Steps with matching H2 anchors.
Component Rules
RULE-63: Stats Bar Count
Stats bars (:::stats) must have exactly 4 items. The CSS grid is designed for 4 columns; other counts break the layout.
PRO Wire's CSS uses grid-template-columns: repeat(4, 1fr). Different item counts cause uneven layouts.
CON Flexible grids could handle variable counts. Wire is opinionated about consistent visual rhythm.
What Wire enforces: Warning when stats bar has a count other than 4 items.
What Wire does NOT flag: Stats bars with exactly 4 items.
RULE-64: Custom Hero Section Class
Landing page hero sections using custom HTML must declare the section-hero class. Without it, Wire wraps the section in its own container, doubling the wrapper.
PRO Wire's _landing_sections() skips its wrapper when section-hero class is present. Missing class = double wrapper.
CON None. Missing class is always a bug when using custom hero HTML.
What Wire enforces: Warning when first landing section has custom section HTML without section-hero class.
What Wire does NOT flag: Hero sections with correct class declaration.
RULE-68: Progress Bar Values
Progress bar fill values must be 0-100%. Values above 100% break the visual layout.
PRO CSS width above 100% overflows the container, creating visual artifacts.
CON None. Values over 100% are always bugs.
What Wire enforces: Warning when progress bar fill exceeds 100%.
What Wire does NOT flag: Valid 0-100% fill values.
Performance Rules
RULE-74: First Image Not Lazy
The first image on a page must not use loading="lazy". Lazy loading the LCP (Largest Contentful Paint) image delays the primary Core Web Vital.
PRO Google's web.dev: "Don't lazy-load images that are in the viewport during the initial load." LCP is a ranking factor.
CON None. Lazy-loading above-the-fold content always hurts LCP.
What Wire enforces: Warning when the first image in content uses loading="lazy".
What Wire does NOT flag: First images without lazy loading, or subsequent images with lazy loading.
RULE-77: Large Images
Images over 200KB hurt page speed and Core Web Vitals. Large images are the #1 cause of slow Largest Contentful Paint.
PRO HTTP Archive: median page image weight is 1MB. Google PageSpeed Insights penalizes unoptimized images. AVIF/WebP reduce size 50-80%.
CON Hero images and photography may exceed 200KB. Wire warns to encourage optimization.
What Wire enforces: Warning when image files exceed 200KB.
What Wire does NOT flag: Images under 200KB.
Link Quality Rules
RULE-65: OG Image
Open Graph image tag enables rich social media previews. Pages shared without og:image get generic thumbnails.
PRO LinkedIn: posts with images get 98% more comments. Twitter Cards require og:image for image previews.
CON Not all pages are shared socially. But og:image costs nothing to add.
What Wire enforces: Warning when og:image meta tag is missing.
What Wire does NOT flag: Pages with og:image set.
RULE-66: Form Without Handler
Forms without action or JavaScript handlers silently fail. Users fill them out, submit, and nothing happens.
PRO A form that does nothing on submit is worse than no form at all. It damages trust.
CON JavaScript-handled forms may not have an action attribute. Wire checks for any handler.
What Wire enforces: Warning when form lacks both action attribute and onsubmit handler.
What Wire does NOT flag: Forms with action or JavaScript handlers.
RULE-69: Cross-Language Links
Internal links from one language to another (e.g., /de/ page linking to /en/ content) break the user's language experience.
PRO Google recommends self-contained language directories. Cross-language links confuse crawlers about page language.
CON Language switcher links are legitimate cross-language links. Wire excludes lang-switcher and external URLs.
What Wire enforces: Warning when page in one language links to content in another language.
What Wire does NOT flag: Same-language links, language switcher links, external URLs.
RULE-70: No Absolute Self-Links
Pages linking to themselves via absolute URL (https://own-domain.com/page/) instead of relative paths create unnecessary coupling to the domain.
PRO Relative paths survive domain changes and work in preview deployments. Absolute self-links are fragile.
CON Canonical tags should be absolute. Wire only checks <a> links, not <link> elements.
What Wire enforces: Warning when <a> links use absolute URLs pointing to the site's own domain.
What Wire does NOT flag: Relative internal links.
RULE-75: Click Depth
Pages more than 3 clicks from the homepage receive less crawl priority. Deep pages are crawled less frequently.
PRO Google's crawl budget research: pages at depth 1-3 are crawled most frequently. Depth 4+ drops significantly.
CON Large sites (1000+ pages) will have some deep content. Wire warns but doesn't error.
What Wire enforces: Warning when page is more than 3 clicks from homepage.
What Wire does NOT flag: Pages within 3 clicks of homepage.
RULE-76: Missing Date
Article pages without date metadata lack freshness signals for E-E-A-T. Google uses dates to determine content relevance.
PRO Google's Search Quality Guidelines value content freshness. Date metadata enables "published date" in SERPs.
CON Evergreen content may not need dates. Wire checks article pages specifically.
What Wire enforces: Warning when article page has no date metadata.
What Wire does NOT flag: Pages with date or non-article pages.
RULE-78: Dead-End Pages
Pages with zero outbound internal links are dead-ends. Users can't navigate further; crawlers can't discover connected content.
PRO Google's PageRank flows through links. Dead-end pages hoard PageRank without distributing it.
CON Some utility pages (search, 404) may have few links. Wire checks content pages.
What Wire enforces: Warning when page has zero outbound internal links.
What Wire does NOT flag: Pages with at least one internal link.
RULE-81: Conflicting Anchor Text
Same URL linked with different anchor text on the same page. Google uses first-link anchor for ranking; conflicting anchors dilute the signal.
PRO Google's first-link-priority: the first anchor text for a URL gets the SEO value. Different anchors for the same URL waste subsequent link signals.
CON Different sections may reference the same page in different contexts. Wire flags for awareness.
What Wire enforces: Warning when same URL appears multiple times with different anchor text.
What Wire does NOT flag: Consistent anchor text per URL.
RULE-92: Weak Integration
Articles with only 1 outbound internal link are weakly integrated into the site. Topic clusters need interconnection.
PRO HubSpot research: topic cluster pages with 5+ internal links rank 2x better than isolated pages.
CON Very short or new articles may start with few links. Wire warns to encourage enrichment.
What Wire enforces: Warning when article has only 1 outbound internal link.
What Wire does NOT flag: Articles with 2+ internal links.
Accessibility Rules
RULE-93: Table Without Thead
Tables without <thead> hurt accessibility. Screen readers can't distinguish header cells from data cells.
PRO WCAG 2.1 Success Criterion 1.3.1: tables need proper header markup. Google also uses table structure for featured snippets.
CON Simple data tables may not need formal headers. Wire warns for all tables.
What Wire enforces: Warning when table element lacks <thead>.
What Wire does NOT flag: Tables with proper thead.
RULE-96: No Semantic HTML
Pages should use semantic HTML elements (<article>, <nav>, <main>, <section>) for accessibility and SEO.
PRO Screen readers use semantic elements for navigation. Google uses them to understand page structure.
CON Wire's templates already include semantic elements. This rule catches custom template overrides that break semantics.
What Wire enforces: Warning when page lacks semantic HTML landmarks.
What Wire does NOT flag: Pages with proper semantic structure.
Metadata Quality Rules
RULE-73: Duplicate Description
Multiple pages sharing the same meta description compete for the same SERP snippet. Google may rewrite both.
PRO Ahrefs: 25% of top-ranking pages have no meta description. But duplicate descriptions are worse than missing ones.
CON Template-generated descriptions may legitimately share format. Wire checks exact match only.
What Wire enforces: Warning when meta description text matches another page.
What Wire does NOT flag: Unique descriptions per page.
RULE-94: Long Description
Descriptions over 160 characters get truncated in SERPs. The trailing text is cut with "...", so the value proposition is lost.
PRO Google displays approximately 155-160 characters of description. Excess text is hidden.
CON Google sometimes shows longer snippets for informational queries. But 160 is the safe maximum.
What Wire enforces: Warning when description exceeds 160 characters.
What Wire does NOT flag: Descriptions within 160 characters.
RULE-99: Short Description
Descriptions under 70 characters underutilize the SERP snippet space. Competitors with fuller descriptions win more clicks.
PRO A 70-character description wastes 50%+ of available snippet space. Longer descriptions convey more value.
CON Some pages have simple value propositions. But even then, 70+ characters is easy to achieve.
What Wire enforces: Warning when description is under 70 characters.
What Wire does NOT flag: Descriptions of 70+ characters.
Link/Content Rules
RULE-101: Tel Format
Phone links should use E.164 format (+49...). Non-standard formats may not be dialable on mobile devices.
PRO E.164 is the international standard for phone numbers. Mobile browsers use tel: links for click-to-call.
CON Local formats may be more readable. Wire checks the href, not the display text.
What Wire enforces: Warning when tel: links don't use E.164 format.
What Wire does NOT flag: Correctly formatted tel: links.
RULE-102: PDF Link Indicator
Links to PDF files should indicate the file type. Users clicking a link expecting a webpage and getting a PDF download is a poor experience.
PRO Nielsen Norman Group research: unexpected file downloads are the #2 user frustration on the web.
CON Context may make the file type obvious. Wire warns for awareness.
What Wire enforces: Warning when links to .pdf files don't indicate file type in anchor text.
What Wire does NOT flag: PDF links with type indicator.
Page Structure Rules
RULE-103: Root Index Layout
The root index page must have an explicit layout. Without one, Wire guesses, which may produce unexpected results.
PRO The homepage is the most important page. Its layout should be an explicit decision.
CON None. Missing root layout is always a configuration oversight.
What Wire enforces: Warning when root index.md has no layout in frontmatter.
What Wire does NOT flag: Root pages with explicit layout.
RULE-104: Landing Page Components
Landing pages (layout: landing) without Wire components look empty. Either use components or change to layout: page.
PRO Landing pages are conversion pages. Empty landing pages waste the layout's full-width freedom.
CON Custom HTML landing pages may not use Wire components. Suppressive via _overruled.
What Wire enforces: Warning when landing page has no Wire component classes, <hr> sections, or split blocks.
What Wire does NOT flag: Landing pages with at least one Wire component.
RULE-105: Card External Links
Card links must be internal. Cards are site navigation, not outbound link containers.
PRO Cards in Wire render as clickable blocks. External links in cards break the navigation pattern.
CON Some cards may reference external resources. Wire enforces internal-only for consistency.
What Wire enforces: Warning when :::cards contain external link URLs.
What Wire does NOT flag: Cards with internal links.
RULE-106: Card Link Consistency
All cards in a :::cards block must be consistently linked or unlinked. Mixed linked/unlinked cards create visual inconsistency.
PRO UX consistency: some cards clickable and others not is confusing. All-or-nothing.
CON None. Inconsistent card linking is always a design oversight.
What Wire enforces: Warning when some cards in a block have links and others don't.
What Wire does NOT flag: Blocks where all cards are linked or all are unlinked.
RULE-107: Landing Page Hero Length
Landing page heroes should be short. Content between the H1 and the first component, such as a CTA block, stats section, or horizontal divider, appears centered. Long paragraphs create a wall of centered text that looks unprofessional and buries the CTA.
PRO Visual impact: short heroes draw the eye to the CTA. Long centered paragraphs are hard to scan, especially on mobile where line lengths vary.
CON Content-heavy landing pages may need more context above the fold. But that context belongs in a section below, not in the hero.
What Wire enforces: Warning when hero body text exceeds 40 words before the first component. Exempt: FAQPage schema pages (protocol/reference docs).
What Wire does NOT flag: Heroes under 40 words. Non-landing pages.
RULE-108: Markdown Links in Plain-Text Shortcodes
Shortcodes like :::stats, :::banner, and :::progress render their values as plain text. Markdown link syntax [text](url) inside these components is silently stripped to just the text. The author thinks the link works, the visitor sees no link.
PRO Silent data loss: [ISO 27001](https://trust.example.com/) | Certified renders as "ISO 27001 | Certified" with no clickable link. The author cannot tell from the source that the link is dead. This was found on a real customer site with 6 broken stats links across two languages.
CON False positives on intentional brackets: rare. Markdown link syntax [text](url) in stats values is almost always a mistake. Literal brackets without a URL would not match.
What Wire enforces: Warning when [text](url) pattern appears inside .stat-value, .stat-label, .banner-value, .banner-text, .progress-name, or .progress-value elements. Suggests using :::badges which does render links.
What Wire does NOT flag: Links in :::cards, :::cta, :::badges, :::tabs, :::faq, or body text. These components render markdown normally.
See the Guides overview for all Wire documentation.