DEV Community

I used 10 parallel Claude Code agents to audit 291 SEO pages at once. Here's what we found.

have 291 pages on melororium.com. All of them generate from a TypeScript data layer. One person wrote all the content. Me.

The problem: I cannot audit 291 pages manually. No practical attention span for it. By the time I check page 50, I have forgotten what I saw on page 12.

So I built a multi-agent workflow with Claude Code.

The setup
Claude Code lets you spawn parallel subagents via the Workflow tool. You can structure work as phases — some sequential, some parallel — and give each agent a specific, bounded job.

The audit phase runs 10 agents in parallel. Each agent checks one quality dimension across all 291 pages simultaneously:

// SEO Audit Workflow — pseudocode
// 10 parallel agents, 291 pages, ~20 minutes total

const auditPhase = {
type: "parallel",
agents: [
{ id: "seo-desc-auditor", task: Check all seoDesc fields. Length must be 145-160 chars. Flag forbidden phrases: 'freelancer', 'lifetime deal', 'pay once'. Flag old prices: $149, $299, $499. },
{ id: "pricing-auditor", task: Scan all content for old prices ($149/$299/$499). Current correct prices: Starter $29/mo, Agency $59/mo, Studio $119/mo. Report every location where old prices appear. },
{ id: "dead-link-checker", task: Verify all internal links. Every /task-tracker/* route must exist. Every /pricing link must resolve. Report broken paths. },
{ id: "editorial-note-scanner", task: Find developer notes visible in rendered content. Patterns: 'Context:', 'CTA here', 'Note:', 'TODO', 'PLACEHOLDER'. These must not appear in production article bodies. },
{ id: "duplicate-faq-auditor", task: Find FAQ answer blocks reused across more than 2 posts. Exact-match comparison across all blog content. Flag duplicates with locations. },
{ id: "schema-auditor", task: Validate JSON-LD schema markup on all pages. Required fields must be present. No undefined or null values in required positions. },
{ id: "linkbox-auditor", task: Check all CTA linkBox labels. Correct label: 'Melororium'. Flag any instance of 'Melororium Task Tracker' or other variants. },
{ id: "internal-link-auditor", task: Find posts that mention pricing but lack a /pricing link. Find posts that describe features but lack matching /task-tracker/* links. Report gaps. },
{ id: "compare-data-auditor", task: Verify competitor pricing on comparison pages. ClickUp Business = $12/seat/month. Asana = $11/seat/month. Flag any value that differs from current public rates. },
{ id: "audience-targeting-auditor", task: Flag any seoDesc or H1 targeting 'freelancer', 'solo', 'self-employed'. Melororium targets teams of 4-25. Wrong audience targeting = wrong queries. }
]
};
Each agent reads the relevant data files, runs its check, writes findings to a shared results file. Total time: about 20 minutes for all 291 pages.

What it found: 155 defects
The critical ones:

35 sections with developer notes in production. Strings like "Context: Natural mention — include CTA here" were inside published blog article bodies. Not in HTML comments. In rendered text. Google crawled those pages. Real visitors read that text. I shipped scaffolding to production and left it there for weeks without noticing.

28 linkBox labels with wrong product name. CTA buttons across the site said "Melororium Task Tracker." That is the old product name. Inconsistent across 28 locations — this one was purely a find-and-replace problem that slipped past review.

7 posts with old pricing. Articles showed $149 as the price. The current Starter plan costs $29/mo. These articles predated the pricing model change and I never updated them. Any reader who hit one of those posts before the pricing page got the wrong product in their head.

11 seoDesc fields targeting wrong audience. Meta descriptions with "freelancer" or "solo" positioning. Melororium targets agencies and studios with 4 to 25 people. Wrong audience targeting ranks you for queries that drive visitors who will never convert.

The fix workflow
Parallel agents writing to the same large file cause conflicts. The main content file is 13,000 lines. For that file, I run sequential agents, each handling a line range:

// Fix Workflow — pseudocode
// Sequential for the big file, parallel for everything else

const fixPhase = {
mainFile: {
type: "sequential", // prevents write conflicts on one large file
agents: [
{ id: "fixer-1", task: "Fix all defects in content.ts lines 1-3250" },
{ id: "fixer-2", task: "Fix all defects in content.ts lines 3251-6500" },
{ id: "fixer-3", task: "Fix all defects in content.ts lines 6501-9750" },
{ id: "fixer-4", task: "Fix all defects in content.ts lines 9751-13000" }
]
},
otherFiles: {
type: "parallel", // separate files, no conflict risk
agents: [
{ id: "data-fixer", task: "Fix all defects across /data/.ts" },
{ id: "config-fixer", task: "Fix all defects across /lib/seo/
.ts" }
]
}
};
The sequential phase handles the big file cleanly. The parallel phase handles everything else at the same time.

What I learned
The audit took 20 minutes. The fixes took 2 hours. That ratio tracks: finding defects at scale is fast, fixing them carefully is slow.

The harder lesson: 35 developer notes in production, weeks of Google crawling, and I had no idea. Manual review would not have caught them either. There is no realistic way to read 291 pages and spot scaffolding strings embedded in 13,000 lines of TypeScript.

Systematic auditing scales. Human review does not.

I will re-run this audit after deploy to verify the fixes landed correctly, then wire it into CI so it runs on every merge to main.

If you generate content at scale from a data layer, build the audit workflow before you hit 100 pages. Fixing 155 defects across 291 pages is a full day of work.

The stack: Claude Code with multi-agent Workflow, TypeScript content generation, Next.js on the front end. The site is melororium.com if you want to see the output. If you have done something similar or have thoughts on the parallel-vs-sequential tradeoff for large files, I want to hear it.

Top comments (0)