Audit Walkthrough - Reading Your First Audit
You ran the audit and the terminal filled with symbols, dashes, and commands you've never seen before. Here's how to read what it's telling you.
The audit output has four sections: HEALTH, ACTION, SEO, and INFO. HEALTH shows a list of `+` and `-` lines. ACTION lists the commands to run. Most people get stuck on HEALTH because the `-` lines don't explain themselves. A `-` next to "2 keyword overlap(s)" doesn't tell you whether that's urgent or ignorable. The answer depends on the numbers that appear in ACTION. But before you get there, which part of the output stopped you?
Every `-` line in HEALTH has a corresponding entry in ACTION with a command. But not all `-` lines are equal. A broken internal link costs nothing to fix and `sanitize` handles it automatically. A keyword overlap is different: the ACTION entry shows a ratio and a skew score, and those numbers determine whether Wire will merge two pages or reword them to be distinct. Merging deletes a page. That's a permanent change. Which `-` line is showing up in your audit?
The fix sequence has a specific order for a reason. Merges happen before rewords because a merge deletes a page. If you run `reword` first, you spend API credits rewriting a page that gets absorbed and archived ten minutes later. The same logic applies to crosslinks: Wire can't link to a page that no longer exists. The sequence is: sanitize, deduplicate, news, refine, reword, crosslink. Running them out of order doesn't break anything permanently, but it wastes money. How far into the sequence are you?
The audit itself costs nothing. It reads from the local GSC database and runs no API calls. The costs start when you run commands that rewrite content: `deduplicate`, `news`, `refine`, `reword`, and `crosslink`. For a 45-page site, the full sequence runs around $1.58. But that number scales with how many pages are touched, not how many pages exist. A site with 200 pages but only 3 stale pages pays roughly the same as a 45-page site with 3 stale pages. The variable that drives cost is the number of problems, not the size of the site.
A clean audit shows all `+` lines in HEALTH and no ACTION section at all. If you ran a merge, you'll also notice the page count in INFO dropped by one. That's expected. The merged page was archived, not deleted. It still exists in the archive directory but no longer appears in audits. If you still see `-` lines after running the fix sequence, one of two things happened: a command was skipped, or a new problem appeared because a fix exposed something that was previously hidden behind a broken link.
Problems compound between audits. A broken link today becomes an orphan page next week when someone removes the only other link pointing to it. A keyword overlap left alone splits traffic for months before it shows up in ranking drops. The recommended routine is `data` then `audit` at the start of each week, with a full fix sequence whenever `-` lines appear. The `data` command must run first. Without fresh GSC data, the audit can't detect cannibalization or flag reword opportunities accurately.
You ran python -m wire.chief audit for the first time. The terminal filled with symbols, numbers, and commands. This page explains every line.
We will use AutoFix München (45 service pages, German car repair shop) as the example. The audit below is what you see on a real site with real problems.
Run the Audit
python -m wire.chief data # Pull GSC metrics first
python -m wire.chief audit # Audit all topics
python -m wire.chief audit services # Or audit one topic
The data command must run first. Without GSC data, the audit cannot detect cannibalization, dead pages, or reword opportunities.
The Four Sections
Every audit produces four sections in this order: HEALTH, ACTION, SEO, INFO. Here is the full output for AutoFix München, annotated.
HEALTH
python -m wire.chief auditEach line is a check. + means clean. - means something needs attention.
What each line checks:
| Line | What it means |
|---|---|
| GSC data fresh | Your keyword database was updated within 28 days. If stale, run data again. |
| No dead pages | No page has impressions below max(10, site_median * 0.05) with other pages covering its keywords. |
| 2 keyword overlap(s) | Two pairs of pages rank for the same keywords. Google splits traffic between them, hurting both. |
| No duplicate titles | Every page has a unique <title>. Duplicates confuse Google about which page to rank. |
| 1 duplicate description(s) | Two pages share the same meta description. Less critical than titles, but still wastes the SERP snippet. |
| 3 stale page(s) need news | Three pages haven't been updated within their freshness interval (21 days for services). |
| No pending news to refine | No unintegrated news files sitting in page directories. |
| No orphan pages | Every page has at least one inbound internal link. |
| 4 broken internal link(s) | Four links point to pages that don't exist. Could be typos, renamed slugs, or deleted pages. |
| Source diversity healthy | No page over-relies on a single external domain for citations. |
| 2 underlinked page(s) | Two pages have fewer than 3 inbound internal links. They exist but are poorly connected. |
| No long titles | All titles are under 60 characters. Google rewrites 76% of titles over 60 chars. |
| No long descriptions | All descriptions are under 160 characters. |
| 1 page missing external citations | One page has no outbound links to external sources. |
| H1 tags healthy | Every page has exactly one H1 that matches its title. |
| No thin pages | No page has fewer than 200 words. |
| Heading structure healthy | No skipped heading levels (H1 to H3 without H2) and no numbered headings. |
ACTION
The ACTION section only appears when HEALTH shows - indicators. Each problem includes the command to fix it.
Reading the overlap entries:
bremsen × bremsen-wechsel (4 shared, ratio=0.72, skew=0.81) → MERGE
- 4 shared: these pages rank for 4 of the same keywords
- ratio=0.72: 72% of the smaller page's keywords are shared. High overlap.
- skew=0.81: bremsen gets 81% of the shared traffic. Clear winner.
- MERGE: Wire will absorb bremsen-wechsel's unique content into bremsen and archive the donor
klimaanlage × klimaservice (3 shared, ratio=0.28, skew=0.55) → DIFFERENTIATE
- ratio=0.28: moderate overlap (28%)
- skew=0.55: nearly equal traffic split. Google can't decide which page to rank.
- DIFFERENTIATE: Wire will reword both pages to sharpen their distinct angles and add cross-links
Reading the broken link entries:
bremsen → /services/bremsscheiben/ (not found, fix: bremsscheiben-wechsel)
Wire found a link on the bremsen page pointing to /services/bremsscheiben/, which doesn't exist. It detected a likely match: bremsscheiben-wechsel. The sanitize command will fix this automatically.
oelwechsel → /services/filter/ (not found)
No fix suggested. The slug doesn't match anything. You need to remove this link manually or create the missing page.
SEO
Reading the reword table:
| Column | Meaning |
|---|---|
| score | impressions * (1 - CTR). Higher = more wasted potential. |
| pos | Average ranking position across all keywords. |
| imp | Total monthly impressions. |
| ctr | Click-through rate. Low CTR at a good position = title/description problem. |
oelwechsel has 1,840 impressions but only 0.4% CTR at position 8.2. The reword command will rewrite its title and headings to better match the search queries people use.
Reading content gaps:
"zahnriemen wechsel kosten" gets 320 impressions but no page owns it. Three pages rank weakly (positions 22-31). This keyword cluster deserves its own page, or the zahnriemen page needs expansion to capture it.
INFO
Summary statistics. Pages "without GSC data" are either newly created (less than 28 days old) or not yet indexed by Google.
The Fix Sequence
The ACTION section lists problems. Here is the order to fix them:
# 1. Fix broken links first (free, no API calls)
python -m wire.chief sanitize services
# 2. Resolve overlaps (merges must happen before rewords)
python -m wire.chief deduplicate services
# 3. Gather fresh news for stale pages
python -m wire.chief news services
# 4. Integrate news into pages
python -m wire.chief refine services
# 5. SEO rewrite for top opportunities
python -m wire.chief reword services
# 6. Fix underlinked pages
python -m wire.chief crosslink services
# 7. Run audit again to verify
python -m wire.chief audit services
This order matters. Merges change which pages exist. Rewords need to know the final page set. Crosslinks need to know the final content. Running them out of order wastes API calls on pages that will be merged or rewritten.
Cost of This Entire Sequence
For AutoFix München's 45 service pages:
| Command | Pages touched | Cost |
|---|---|---|
| sanitize | 4 (broken links) | $0 (no API calls) |
| deduplicate | 4 (2 merges or differentiates) | ~$0.24 |
| news | 3 (stale pages) | ~$0.50 (web search + evaluation) |
| refine | 3 (pages with news) | ~$0.18 |
| reword | ~9 (top 20% full + next 30% light) | ~$0.54 |
| crosslink | 2 (underlinked pages) | ~$0.12 |
| Total | ~$1.58 |
The audit itself costs $0. It reads from the local GSC database.
What a Clean Audit Looks Like
After running the fix sequence:
python -m wire.chief audit servicesAll + marks. One fewer page (bremsen-wechsel was merged into bremsen and archived). The site is clean.
Running Audits Regularly
Run audit after every batch operation and at least weekly during active content work:
# Monday morning routine
python -m wire.chief data # Fresh GSC data
python -m wire.chief audit # Check all topics
Problems compound. A broken link today becomes an orphan page next week. A keyword overlap left unchecked splits traffic for months. The audit catches problems early, before they cost rankings.