On this page
- Layer 1: Prevention Through Prompts
- What Prevention Catches
- Layer 2: Auto-Fix on Save
- The Eleven Auto-Fixes
- Auto-Fix in Practice
- Why Auto-Fix Beats Manual Review
- Merge Guard
- Layer 3: Detection Through Audit
- What Audit Detects
- Reading an Audit Report
- The Four Audit Sections
- Why Three Layers?
- Layer 4: Build Verification
- Evidence-Based Decisions
- Evidence Hierarchy
- Each Auto-Fix Rule Traced to Evidence
- What Wire Does Not Check
Wire enforces content quality at three levels. Each layer catches what the previous one missed. Together they make it nearly impossible for a page to ship with structural SEO problems.
To see this in action, follow a single page through all three layers. CompareStack runs wire.content create vendors/acme-ocr. Wire's AI writes a vendor profile, Wire saves it, then audit checks the result.
Layer 1: Prevention Through Prompts
Every AI call includes your site's styleguide. The styleguide teaches the AI the rules before it writes anything. This prevents most issues from being created in the first place.
The default styleguide (wire/prompts/_style.md) covers:
- Title rules. 51-55 characters, dashes not pipes, no brackets, must match H1.
- Description rules. Under 160 characters, starts with a verb or noun.
- Internal linking. First-mention only, 2-5 word descriptive anchor text, never "click here" or "learn more."
- External citations. At least one per page. Sources are append-only. The AI cannot remove existing citations.
- Heading structure. One H1 per page, no numbered headings, no skipped levels.
You override the styleguide by placing docs/_styleguide.md in your docs directory. Wire picks it up automatically. See Prompt Engineering for the full system.
What Prevention Catches
The AI writes this title for the Acme OCR vendor page:
title: Acme OCR | Enterprise Document Processing Platform [2026 Review]
Three violations in one line: pipe separator, brackets, 64 characters (over the 51-55 limit). Because the styleguide says "51-55 characters, dashes not pipes, no brackets," the AI typically produces:
title: Acme OCR - Enterprise Document Processing
52 characters, dash separator, no brackets. Prevention caught 3 of 3 issues before they existed.
But the AI is not perfect. About 15-20% of the time, it still produces a pipe or bracket despite the rules. That is what Layer 2 is for.
Layer 2: Auto-Fix on Save
Every time Wire saves a page, it runs _sanitize_content(): eleven automatic fixes applied before the file hits disk.
The Eleven Auto-Fixes
| # | Fix | Before | After |
|---|---|---|---|
| 1 | Pipe to dash | Acme OCR \| Document Processing | Acme OCR - Document Processing |
| 2 | Strip brackets | Acme OCR [2026 Review] | Acme OCR |
| 3 | Insert H1 | (body has no H1) | # Acme OCR - Document Processing inserted |
| 4 | Align H1 | Title: Acme OCR, H1: About Acme | H1 changed to # Acme OCR |
| 5 | Downgrade H1 | Two # H1 headings in body | Second becomes ## H2 |
| 6 | Dedup internal links | [Rossum](/vendors/rossum/) appears 4 times | First kept, others become plain text |
| 7 | Restore sources | AI dropped 2 external citations during rewrite | Citations restored from previous version |
| 8 | Dedup external links | Same URL cited 5 times | First kept, rest become plain text |
| 9 | Fix broken links | [Rossum](/vendors/rosum/) (typo) | Fixed to /vendors/rossum/ via slug match |
| 10 | Rewrite redirect links | [Rossum](/vendors/old-rossum/) (redirect source) | Rewritten to /vendors/rossum/ (target); 410 Gone stripped to plain text |
| 11 | Strip cross-language links | /de/ page links to /en/automation/ | Link stripped to plain text (wrong language) |
These fixes are silent, deterministic, and free (no API call). The operator sees the corrected result in the saved file.
Auto-Fix in Practice
The AI writes a page for CompareStack's Acme OCR profile. The raw output contains:
---
title: Acme OCR | Enterprise Document Processing [Review]
description: Acme OCR offers best-in-class document processing.
---
# About Acme OCR Platform
Acme OCR processes documents with high accuracy. Similar to
[Rossum](/vendors/rossum/), it supports multiple formats.
[Rossum](/vendors/rossum/) also offers cloud deployment.
[ABBYY](/vendors/abbyy/) competes in the same market.
Read more about [ABBYY](/vendors/abbyy/) here.
See the [Rosum comparison](/vendors/rosum/) for details.
After _sanitize_content():
---
title: Acme OCR - Enterprise Document Processing
description: Acme OCR offers best-in-class document processing.
---
# Acme OCR - Enterprise Document Processing
Acme OCR processes documents with high accuracy. Similar to
[Rossum](/vendors/rossum/), it supports multiple formats.
Rossum also offers cloud deployment.
[ABBYY](/vendors/abbyy/) competes in the same market.
Read more about ABBYY here.
See the [Rossum](/vendors/rossum/) comparison for details.
What changed:
- Fix 1: pipe
|replaced with dash- - Fix 2:
[Review]brackets stripped - Fix 4: H1 aligned to match the corrected title
- Fix 6: duplicate internal links to Rossum and ABBYY became plain text (first mention kept)
- Fix 9: broken
/vendors/rosum/fixed to/vendors/rossum/via hyphen normalization
Five fixes, zero cost, zero human review. The description still says "best-in-class". That is a content problem, not a structural one. Layer 1 (banned word list) should have caught it. If it did not, the site's styleguide needs a banned word rule.
Why Auto-Fix Beats Manual Review
Manual content QA at scale is a known failure mode. At 500 pages with 3.2 structural issues per 100 pages, that is 16 issues per audit cycle, each requiring someone to find, understand, and fix. Wire fixes them on write, before they reach production.
Merge Guard
When merging two pages, Wire checks that the output preserves at least 80% of the keeper's body. If the merge would lose too much content, the result goes to index.md.preview only. The donor is not archived, and no content is lost.
Layer 3: Detection Through Audit
The audit command scans all pages and reports problems that exist despite Layers 1 and 2. This catches issues in pages that were not created by Wire, or issues that accumulated over time.
What Audit Detects
| Check | Threshold | Example |
|---|---|---|
| Duplicate titles | Exact match across pages | Two pages titled "Acme OCR: Document Processing" |
| Long titles | Over 60 characters | Google truncates in search results |
| Long descriptions | Over 160 characters | Google truncates in snippets |
| Missing citations | Zero external links | Page has no third-party evidence |
| H1 issues | Missing, multiple, or mismatched | H1 says "About Us" but title says "Acme OCR" |
| Thin content | Under 200 words | Stub pages that may hurt rankings |
| Heading hierarchy | Skipped levels | H1 followed by H3 without H2 |
| Source concentration | One domain provides >40% of links | Over-reliance on a single source |
| Orphan pages | Zero inbound internal links | Invisible to navigation and crawlers |
| Underlinked pages | Fewer than 3 inbound links | Weak internal link equity |
| Broken internal links | Target page does not exist | Wasted crawl budget |
Reading an Audit Report
Here is what CompareStack's audit output looks like after running python -m wire.chief audit vendors:
HEALTH: vendors (142 pages)
+ Search data loaded (8,530 keywords)
+ No dead pages
- Cannibalization: 23 overlap pairs (3+ shared keywords)
- Duplicate titles: 2 page(s)
+ Descriptions OK
+ News: all current
+ Refinement: none pending
+ No orphan pages
- Broken links: 4 source page(s)
+ Source diversity OK
- 3 underlinked page(s) (<3 inbound links)
ACTION: vendors
Merge (hard overlap, ratio > 0.4):
acme + acme-ocr — 4 shared kw, ratio 0.80, acme gets 85%
→ python -m wire.chief deduplicate vendors
Differentiate (soft overlap):
betacorp + echocorp — 3 shared kw, ratio 0.50, split 52/48
→ python -m wire.chief deduplicate vendors
Broken links (4 source pages):
vendors/acme — 2 broken (slug fix available: rosum → rossum)
vendors/betacorp — 1 broken (stripped: /vendors/old-page/)
→ python -m wire.chief sanitize vendors
Duplicate titles:
"Document Processing Platform" — vendors/acme, vendors/deltacorp
Underlinked (< 3 inbound):
vendors/newvendor (0 inbound)
vendors/acme-ocr (1 inbound)
vendors/smallcorp (2 inbound)
→ python -m wire.chief crosslink vendors
Each section tells you what is wrong and how to fix it. The +/- indicators show pass/fail at a glance. The ACTION section only appears when problems exist.
The Four Audit Sections
| Section | Purpose |
|---|---|
| HEALTH | Pass/fail checklist: is data loaded, are there overlaps, broken links, etc. |
| ACTION | Only if problems exist: specific pages to fix with commands to run |
| SEO | Reword opportunities ranked by impression volume |
| INFO | Untracked pages, archived count, summary statistics |
Why Three Layers?
Prompts alone miss approximately 15-20% of issues. The AI follows rules well but not perfectly. It occasionally produces pipes in titles, duplicate links, or broken slugs despite clear instructions.
The sanitizer catches structural problems the AI introduces. But it only sees the current page. It cannot detect cross-page issues like duplicate titles, orphan pages, or keyword cannibalization.
Audit catches cross-page issues that neither prompts nor sanitizer can see. But audit only reports. It does not fix. The operator runs the suggested commands to resolve issues.
| Layer | Scope | Cost | Coverage |
|---|---|---|---|
| Prevention (prompts) | Per-call | Included in your AI subscription | ~80-85% of structural issues |
| Auto-fix (sanitizer) | Per-save | Free | ~10-12% (what prompts missed) |
| Detection (audit) | Cross-page | Free | ~3-5% (cross-page issues) |
Together: close to 100% of structural SEO issues are either prevented, fixed, or flagged.
Layer 4: Build Verification
After rendering markdown to HTML, Wire runs 45 automated checks against the finished site. This catches problems that only appear in the rendered output: missing meta tags that templates should have inserted, broken links between pages, invalid structured data, sitemap contradictions.
The content quality layers above work on markdown. Build verification works on what search engines actually see. Together, the four layers cover the full path from writing to production.
Evidence-Based Decisions
Wire's quality rules are backed by independent research, not Google's public statements. The 2024 Google API leak proved they use signals they publicly denied: click data via NavBoost, domain authority, Chrome data.
Evidence Hierarchy
- Leak-confirmed. Signals found in the 2024 Google API documentation leak (NavBoost click/dwell data, entity extraction,
titleMatchScore,badBacklinks). Ground truth. - A/B tested. SearchPilot runs controlled experiments on live production sites. H1 alignment (+28% traffic), orphan page linking (+significant), schema markup (no change).
- Correlation studies. Zyppy analyzed 81K title tags and 23M links. Backlinko studied 15K keywords. Shows what correlates with rankings, not what causes them.
- Case studies. HubSpot pruned 3,000 posts (+106% traffic). 201Creative deleted thin ecommerce pages (+867% traffic, +291% sales).
- "Google says". Noted but never sufficient. Google publicly denied using click data for years while NavBoost was their strongest ranking signal.
Each Auto-Fix Rule Traced to Evidence
| Fix | Evidence Source | Finding |
|---|---|---|
| Pipe to dash | Zyppy 81K title study | Pipes correlate with higher Google title rewrite rates |
| Strip brackets | Zyppy 81K title study | Bracketed titles rewritten 61.6% of the time |
| Insert/align H1 | SearchPilot A/B test | 28% traffic increase from keyword-aligned H1 |
| Downgrade extra H1 | Google API leak 2024 | Entity extraction uses heading structure; multiple H1s dilute topic signal |
| Dedup internal links | Google (John Mueller) | First link to a URL carries the most weight |
| Restore sources | Reboot Online experiment | Outbound links to authoritative sources improve rankings |
| Dedup external links | Source diversity principle | Concentration in one domain signals lazy research |
| Fix broken links | Google API leak 2024 | badBacklinks is a negative ranking signal |
What Wire Does Not Check
Some popular SEO factors are deliberately excluded:
| Factor | Why Wire skips it |
|---|---|
| Readability score | Portent 750K study: zero correlation with rankings |
| Keyword density | NavBoost shifted ranking power to user behavior signals |
| Image alt text | Moz study: ranking factor for Google Images only, not web search |
| Core Web Vitals | Perficient study: weak correlation, gate not growth lever |
| Schema markup | SearchPilot A/B: no direct ranking change |
| Canonical tags | Server configuration, not content pipeline scope |
These factors may matter for other tools. They do not matter for a content pipeline focused on what moves rankings.
Related: content pipeline, build verification. Source: Google Search Quality Evaluator Guidelines (PDF).