Ahrefs + Claude: 50 On-Page SEO Fixes From a 200-Page Audit
Contents
Last month I opened an Ahrefs (a leading third-party SEO tool) Site Audit for a DTC cosmetics brand and watched the "On-Page" tab fill up with 1,247 issues across 200 product and collection pages. That number is, frankly, normal. Ahrefs' own study of 1 million+ domains found 59.5% of sites have H1s missing or empty, 54.5% have meta descriptions over 156 characters, 51.3% have multiple H1s. So I wasn't looking at a disaster — I was looking at every e-commerce site I've audited since 2014.
The new part is what happened next. I exported those 1,247 issues, ran them through Claude in eight batches, and shipped 50 prioritized fixes back to the CMS through a Google Sheet the marketing team already had. No developer ticket. No agency retainer. The whole loop took two afternoons. The site's organic sessions are up 18% six weeks later.
Here's the exact workflow.
The Pieces
You need four things, and none of them are paid:
- Ahrefs Site Audit (free tier crawls up to 5,000 pages per month) — the source of truth for on-page issues
- Claude (the desktop app or claude.ai, with Projects enabled) — the rewriting engine
- A Google Sheet shared between you and the person who can update the CMS — the shuttle bus for the fixes
- Your CMS's bulk-edit or import capability (Shopify, WordPress, Webflow, Magento all have one) — the place the fixes actually land
That's the whole stack. Total cost: $0 if you're on Ahrefs free, $20/month if you need more crawl capacity, plus your existing Claude plan.
Step 1: Export the On-Page Issues from Ahrefs
Inside Site Audit, go to All Issues → On-Page SEO. You'll see a categorized list. What I want from the export is more than just the issue list — I need the context for each page that has an issue.
Two exports do the work:
- Issues CSV — the default "Export all issues" button. Gives you URL, issue type, and Ahrefs' suggested fix.
- All-pages export (under Page Explorer → Export) — URL, title tag, meta description, H1, word count, internal links count. This is the "current state" of every page on the site.
Paste both into a single Google Sheet, one tab each. Then add a third tab: To_Fix. This is where Claude's output will land.
Step 2: Build a Claude Project with a Tight System Prompt
This is the part most people skip, and it's the part that saves you from re-explaining your brand voice every batch.
Create a Claude Project called "On-Page SEO Fixes." In Project Settings, paste a system prompt that includes:
- Brand name, voice (3–5 adjectives), primary keyword themes
- Hard constraints: "Title tags must be 50–60 characters. Meta descriptions 140–155 characters. Never use clickbait. Never invent product benefits not present on the page."
- A 5-line example of a "before → after" title and meta pair from your own site. Two examples is enough. Claude generalizes from there.
Now every conversation in this project inherits the brand context. You don't have to paste it again.
Step 3: Run the Batches
This is the engine. Don't paste 1,200 issues into a single prompt — Claude will lose focus past about 30 pages per batch.
The batch prompt looks like this:
You are an on-page SEO editor for [brand]. I'll paste a CSV chunk of 25–30 URLs, each with their current title tag, meta description, H1, and the on-page issue(s) Ahrefs flagged. For every URL, output a row with: URL, new title tag (50–60 chars), new meta description (140–155 chars), new H1 if the H1 is missing/duplicate/keyword-stuffed, and a one-sentence rationale citing the original issue. If the current title is already strong, say "no change" and explain why. Do not invent product claims.
I run eight batches of ~25 URLs each. Each batch takes 90 seconds. Total Claude time: about 12 minutes.
I drop each batch's output into a row in the To_Fix tab. The sheet grows to look like this:
| URL | Issue | Current title | New title | Current meta | New meta | H1 fix | Rationale |
|---|---|---|---|---|---|---|---|
| /lipstick-red | Title too long | Buy Our Famous Red Lipstick – Free Shipping | Red Lipstick: Long-Wear Matte Finish | Our red lipstick… | A 12-hour matte red… | – | Trimmed keyword front-loaded, brand dropped from title |
| /serum-vitc | Meta too short | Vitamin C Serum | Vitamin C Serum | Buy now | Our 15% Vitamin C serum brightens in 14 days. Free shipping over $50. | – | Added benefit + CTA + length fix |
Two important things in the schema. First, there's a "no change" column so Claude doesn't force a fix on something that's already fine — the audit's "1,247 issues" count includes a lot of noise. Second, the rationale column is what you show the marketing manager. Without it, "trust me, the AI said so" doesn't fly.
Step 4: Push the Fixes Back Through the CMS — No Code
This is the part the developer used to own. It doesn't anymore.
For Shopify: Export the To_Fix tab as CSV, match the columns to Shopify's bulk-edit Title and Description fields, re-import through the native Product import. Done.
For WordPress + Yoast/RankMath: Install WP All Import (free tier) or use the plugin's own bulk-edit screen. The To_Fix sheet is already structured for it.
For Webflow: Zapier or Make watches a new row in the Google Sheet, calls the Webflow CMS API to update the field, and the change goes live. Webflow's official Zapier integration handles this in 10 minutes of setup.
For Magento/Shopify Plus/headless setups: same Zapier pattern, swap the destination.
In all four cases, the marketer — not the developer — owns the loop. They get the Sheet, review Claude's suggestions, check the boxes they approve, and the change ships.
The 50 Fixes That Actually Mattered
Out of 1,247 raw issues, Claude's batch output proposed 612 changes. After human review (mainly rejecting "no, that's not how we describe the product" suggestions), exactly 50 made it to the CMS. Distribution:
| Issue type | Fixes shipped | Why these first |
|---|---|---|
| Title tag too long (>60 chars) | 18 | Direct CTR (Click-Through Rate, 点击率) lever — Google rewrites or truncates long titles |
| Meta description missing or auto-generated | 14 | Easiest win — Claude wrote them in batches with no risk |
| Duplicate H1 across category pages | 9 | Often caused by theme inheritance; one-line fix per page |
| Missing H1 entirely | 6 | Usually a template bug; Claude drafted 6 different H1s |
| Multiple H1 tags (theme bug) | 3 | Pure technical — but Claude flagged which H1 was the "real" one |
The other 1,197 issues were either low-impact (Open Graph tags, image alt text on decorative images), low-confidence fixes Claude wasn't sure about, or out of scope for this round (canonical tags, internal link restructuring).
Three Things That Broke
Batch too large, Claude gets vague. At 50+ URLs per batch, Claude starts producing formulaic title tags — "X: The Complete Guide to X" patterns. Stay at 25–30.
Claude invents product claims. Twice, Claude wrote meta descriptions that promised "24-hour hydration" or "dermatologist-tested" — neither claim exists on the product page. The system prompt's "do not invent" rule caught it on review, but a weaker prompt wouldn't have. Always do a final human pass.
Ahrefs's "title too long" is a moving target. Ahrefs flags titles over 60 characters. Google routinely rewrites titles to 70+ characters in mobile SERPs (Search Engine Results Page, 搜索引擎结果页). Some of Claude's "fixes" made titles worse in real SERPs. The fix: I now check Google's actual rendering for the top 20 pages before deciding which long titles to shorten.
The Reframe
The traditional on-page SEO audit ends with a 40-page PDF (Portable Document Format, 可携带文档格式) nobody reads. The Claude-batched version ends with 50 rows in a spreadsheet, each with a before/after and a reason. The marketing team reviewed them in 40 minutes and shipped them in an afternoon. That's the whole point of the workflow — not that AI replaces the SEO, but that AI moves the bottleneck from "writing time" to "review time," which is where a human's judgment actually earns its keep.
The Ahrefs audit took 12 minutes. The Claude batch took 12 minutes. The human review took 40 minutes. The CMS push took 90 minutes. Total: under three hours for 50 fixes that moved a measurable metric. That's the bar I now hold every audit to.