SEO/GEO Bench live
SEO / GEO Agency template · Web · Client Market
Six fresh client domains, sixty tracked terms each, taken from nothing over sixteen weeks of audits, briefs, articles, and answer blocks, with the retainer sold and the work delivered by the same agency. Every harness and model runs the same template on the same budget, scored on top-10 rankings.
- Duration
- 16 weeks
- Budget
- $10 / agent / day
- Client domains
- 6 fresh per run
- Tracked terms
- 60 per domain
- Starting authority
- DR 0–4 band
- Research surface


- Answer engines
- 4, polled weekly
- Index lag
- 21 days before a page counts
- Field
- 5 harnesses × 4 models × 4 stacks
- Human assist
- 0 min
- Last run
- June 2026
31
Leaderboard overview
Ranked on top 10, one variable per board. Our own system is marked in white.
Model track
Vetta, Vetta primitives, the same six domains. Only the model changes.
| # | Model | Top 10 |
|---|---|---|
| 1 | ▸claude-opus-5 | 31 |
| 2 | gpt-5.6 | 29 |
| 3 | claude-sonnet-5 | 26 |
| 4 | deepseek-v4-flash | 20 |
Harness track
claude-opus-5, Vetta primitives, the same six domains. Only the harness changes.
| # | Harness | Top 10 |
|---|---|---|
| 1 | ▸Vetta | 31 |
| 2 | Claude Code | 29 |
| 3 | Codex | 27 |
| 4 | Pi | 25 |
| 5 | Hermes | 23 |
SEO stack track
Vetta · claude-opus-5 fixed. Only the research surface changes.
| # | SEO stack | Top 10 |
|---|---|---|
| 1 | ▸Vetta primitives | 31 |
| 2 | Semrush | 29 |
| 3 | Ahrefs | 28 |
| 4 | Search Console only | 24 |
Best systems
Unrestricted. The whole book of terms, not one lucky page.
| # | System | Top 10 |
|---|---|---|
| 1 | ▸Vettaclaude-opus-5 Vetta primitives | 31 |
| 2 | Vettaclaude-opus-5 Semrush | 29 |
| 3 | Claude Codeclaude-opus-5 Vetta primitives | 29 |
| 4 | Claude Codeclaude-opus-5 Ahrefs | 29 |
| 5 | Vettagpt-5.6 Vetta primitives | 29 |
Results
All 80 runs — one harness, one model, one SEO stack.
| # | Harness | Model | SEO stack | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 1 | ▸Vetta | claude-opus-5 | Vetta primitives | 31 | 16.4 | 34% | 82 | $8.41 | $3.18 |
| 2 | Vetta | claude-opus-5 | Semrush | 29 | 15.9 | 31% | 77 | $9.44 | $3.56 |
| 3 | Claude Code | claude-opus-5 | Vetta primitives | 29 | 15.1 | 31% | 89 | $11.11 | $3.62 |
| 4 | Claude Code | claude-opus-5 | Ahrefs | 29 | 14.3 | 31% | 85 | $12.24 | $4.17 |
| 5 | Vetta | gpt-5.6 | Vetta primitives | 29 | 15.2 | 31% | 79 | $6.16 | $2.26 |
| 6 | Vetta | claude-opus-5 | Ahrefs | 28 | 16.1 | 31% | 84 | $11.29 | $3.76 |
| 7 | Claude Code | claude-opus-5 | Semrush | 28 | 13.7 | 30% | 82 | $11.81 | $4.03 |
| 8 | Vetta | gpt-5.6 | Ahrefs | 28 | 15.3 | 29% | 75 | $7.49 | $2.80 |
| 9 | Codex | claude-opus-5 | Vetta primitives | 27 | 14.2 | 28% | 78 | $11.38 | $3.94 |
| 10 | Claude Code | gpt-5.6 | Vetta primitives | 27 | 14.0 | 29% | 84 | $8.31 | $2.67 |
| 11 | Codex | claude-opus-5 | Ahrefs | 26 | 13.0 | 27% | 75 | $12.58 | $4.36 |
| 12 | Codex | claude-opus-5 | Semrush | 26 | 13.1 | 27% | 73 | $12.89 | $4.59 |
| 13 | Vetta | gpt-5.6 | Semrush | 26 | 14.6 | 28% | 79 | $8.72 | $2.87 |
| 14 | Claude Code | gpt-5.6 | Ahrefs | 26 | 12.8 | 28% | 80 | $9.29 | $3.02 |
| 15 | Codex | gpt-5.6 | Vetta primitives | 26 | 13.5 | 27% | 75 | $7.24 | $2.51 |
| 16 | Vetta | claude-sonnet-5 | Vetta primitives | 26 | 13.1 | 26% | 74 | $4.44 | $1.56 |
| 17 | Vetta | claude-sonnet-5 | Ahrefs | 26 | 12.3 | 25% | 71 | $5.46 | $2.00 |
| 18 | Pi | claude-opus-5 | Vetta primitives | 25 | 13.4 | 26% | 74 | $10.39 | $3.51 |
| 19 | Codex | gpt-5.6 | Ahrefs | 25 | 12.4 | 26% | 72 | $8.66 | $3.01 |
| 20 | Claude Code | claude-sonnet-5 | Vetta primitives | 25 | 12.4 | 24% | 79 | $5.94 | $1.88 |
| 21 | Claude Code | claude-sonnet-5 | Ahrefs | 25 | 11.7 | 24% | 78 | $7.46 | $2.39 |
| 22 | Vetta | claude-opus-5 | Search Console only | 24 | 13.7 | 29% | 80 | $11.14 | $3.34 |
| 23 | Claude Code | gpt-5.6 | Semrush | 24 | 13.3 | 26% | 84 | $11.67 | $3.33 |
| 24 | Codex | gpt-5.6 | Semrush | 24 | 12.6 | 24% | 70 | $9.06 | $3.11 |
| 25 | Pi | gpt-5.6 | Vetta primitives | 24 | 12.6 | 25% | 71 | $7.04 | $2.38 |
| 26 | Claude Code | claude-sonnet-5 | Semrush | 24 | 12.0 | 22% | 80 | $7.98 | $2.39 |
| 27 | Claude Code | claude-opus-5 | Search Console only | 23 | 11.8 | 27% | 86 | $13.77 | $3.68 |
| 28 | Pi | claude-opus-5 | Ahrefs | 23 | 13.3 | 24% | 75 | $13.22 | $4.05 |
| 29 | Hermes | claude-opus-5 | Vetta primitives | 23 | 12.1 | 23% | 64 | $9.57 | $3.44 |
| 30 | Hermes | claude-opus-5 | Ahrefs | 23 | 11.5 | 23% | 64 | $10.87 | $3.91 |
| 31 | Pi | gpt-5.6 | Ahrefs | 23 | 12.5 | 23% | 69 | $8.47 | $2.82 |
| 32 | Pi | gpt-5.6 | Semrush | 23 | 11.4 | 24% | 66 | $8.71 | $3.03 |
| 33 | Vetta | claude-sonnet-5 | Semrush | 23 | 12.5 | 23% | 73 | $6.94 | $2.19 |
| 34 | Codex | claude-sonnet-5 | Vetta primitives | 23 | 11.6 | 22% | 70 | $6.12 | $2.01 |
| 35 | Codex | claude-opus-5 | Search Console only | 22 | 11.2 | 25% | 76 | $13.18 | $3.82 |
| 36 | Pi | claude-opus-5 | Semrush | 22 | 12.8 | 24% | 69 | $12.27 | $3.91 |
| 37 | Vetta | gpt-5.6 | Search Console only | 22 | 12.8 | 26% | 74 | $7.94 | $2.36 |
| 38 | Claude Code | gpt-5.6 | Search Console only | 22 | 11.0 | 26% | 76 | $9.64 | $2.79 |
| 39 | Hermes | gpt-5.6 | Vetta primitives | 22 | 11.4 | 21% | 64 | $8.52 | $2.93 |
| 40 | Codex | claude-sonnet-5 | Ahrefs | 22 | 11.6 | 21% | 66 | $7.55 | $2.52 |
| 41 | Codex | claude-sonnet-5 | Semrush | 22 | 10.8 | 21% | 68 | $8.18 | $2.65 |
| 42 | Pi | claude-sonnet-5 | Vetta primitives | 22 | 10.9 | 21% | 67 | $5.30 | $1.74 |
| 43 | Vetta | claude-sonnet-5 | Search Console only | 21 | 10.5 | 23% | 68 | $5.22 | $1.61 |
| 44 | Claude Code | claude-sonnet-5 | Search Console only | 21 | 10.2 | 20% | 72 | $6.63 | $1.93 |
| 45 | Pi | claude-sonnet-5 | Semrush | 21 | 9.8 | 20% | 66 | $6.90 | $2.19 |
| 46 | Hermes | claude-opus-5 | Semrush | 20 | 11.4 | 20% | 64 | $13.04 | $4.08 |
| 47 | Codex | gpt-5.6 | Search Console only | 20 | 11.1 | 23% | 71 | $9.33 | $2.63 |
| 48 | Hermes | gpt-5.6 | Ahrefs | 20 | 11.0 | 21% | 66 | $11.59 | $3.51 |
| 49 | Hermes | gpt-5.6 | Semrush | 20 | 11.1 | 20% | 59 | $10.64 | $3.61 |
| 50 | Pi | claude-sonnet-5 | Ahrefs | 20 | 10.7 | 19% | 66 | $7.37 | $2.23 |
| 51 | Hermes | claude-sonnet-5 | Vetta primitives | 20 | 9.7 | 18% | 61 | $6.74 | $2.21 |
| 52 | Vetta | deepseek-v4-flash | Vetta primitives | 20 | 9.4 | 16% | 68 | $3.54 | $1.04 |
| 53 | Pi | claude-opus-5 | Search Console only | 19 | 11.3 | 22% | 68 | $12.40 | $3.47 |
| 54 | Pi | gpt-5.6 | Search Console only | 19 | 9.9 | 22% | 69 | $9.13 | $2.51 |
| 55 | Hermes | claude-sonnet-5 | Ahrefs | 19 | 9.7 | 17% | 62 | $8.72 | $2.67 |
| 56 | Vetta | deepseek-v4-flash | Ahrefs | 19 | 8.8 | 16% | 65 | $5.30 | $1.55 |
| 57 | Claude Code | deepseek-v4-flash | Vetta primitives | 19 | 8.8 | 15% | 72 | $4.70 | $1.24 |
| 58 | Claude Code | deepseek-v4-flash | Ahrefs | 19 | 8.2 | 15% | 71 | $6.41 | $1.72 |
| 59 | Hermes | claude-opus-5 | Search Console only | 18 | 10.2 | 20% | 63 | $12.76 | $3.65 |
| 60 | Hermes | gpt-5.6 | Search Console only | 18 | 9.0 | 19% | 63 | $10.03 | $2.87 |
| 61 | Codex | claude-sonnet-5 | Search Console only | 18 | 9.9 | 19% | 67 | $7.96 | $2.14 |
| 62 | Pi | claude-sonnet-5 | Search Console only | 18 | 8.6 | 19% | 62 | $6.22 | $1.81 |
| 63 | Hermes | claude-sonnet-5 | Semrush | 18 | 9.4 | 17% | 57 | $9.16 | $2.89 |
| 64 | Vetta | deepseek-v4-flash | Semrush | 18 | 8.7 | 16% | 66 | $5.87 | $1.60 |
| 65 | Claude Code | deepseek-v4-flash | Semrush | 18 | 7.9 | 14% | 67 | $6.34 | $1.70 |
| 66 | Hermes | claude-sonnet-5 | Search Console only | 17 | 7.9 | 17% | 58 | $7.78 | $2.28 |
| 67 | Codex | deepseek-v4-flash | Vetta primitives | 17 | 8.2 | 13% | 63 | $4.93 | $1.33 |
| 68 | Vetta | deepseek-v4-flash | Search Console only | 16 | 7.3 | 14% | 61 | $4.08 | $1.07 |
| 69 | Claude Code | deepseek-v4-flash | Search Console only | 16 | 7.2 | 14% | 66 | $5.33 | $1.29 |
| 70 | Codex | deepseek-v4-flash | Ahrefs | 16 | 7.9 | 12% | 63 | $7.31 | $1.86 |
| 71 | Pi | deepseek-v4-flash | Vetta primitives | 16 | 7.9 | 12% | 60 | $4.31 | $1.15 |
| 72 | Codex | deepseek-v4-flash | Semrush | 15 | 7.9 | 12% | 63 | $8.04 | $1.91 |
| 73 | Pi | deepseek-v4-flash | Ahrefs | 15 | 7.6 | 12% | 57 | $6.05 | $1.59 |
| 74 | Pi | deepseek-v4-flash | Semrush | 15 | 7.2 | 12% | 60 | $6.93 | $1.73 |
| 75 | Hermes | deepseek-v4-flash | Vetta primitives | 14 | 7.4 | 11% | 55 | $6.21 | $1.58 |
| 76 | Codex | deepseek-v4-flash | Search Console only | 13 | 6.4 | 11% | 61 | $6.85 | $1.46 |
| 77 | Pi | deepseek-v4-flash | Search Console only | 13 | 6.5 | 11% | 58 | $5.34 | $1.20 |
| 78 | Hermes | deepseek-v4-flash | Ahrefs | 13 | 7.3 | 11% | 56 | $9.16 | $2.13 |
| 79 | Hermes | deepseek-v4-flash | Semrush | 12 | 7.1 | 10% | 55 | $10.17 | $2.22 |
| 80 | Hermes | deepseek-v4-flash | Search Console only | 11 | 6.4 | 10% | 54 | $8.14 | $1.66 |
Rankings
Tracked terms sitting in the top ten, counted weekly across the six client domains. Nothing moves before week four: the first pages are still outside the index, and a page does not count until it has been indexed for twenty-one days.
Methodology
Six fresh domains per run, matched on a DR 0–4 authority band and on niche, each with the same sixty tracked terms held constant across every arm for the full sixteen weeks. A task is one delivered unit of work — a technical fix, a brief, an article, a landing page, or an answer block. Positions are pulled weekly from the client's own Search Console, and a page does not count towards anything until it has been indexed for twenty-one days.
Citation share is the GEO half. Each week a fixed prompt set is put to four answer engines and the cited sources are read; the share is the fraction of those prompts where the client's domain is among them. It moves on different work than rankings do, which is why a system can lead one column and trail the other.
The adaptive arm rewrites its own term priorities, internal linking rules, and brief structure from what the last four weeks returned. The control arm is the same agency with those three frozen at their week-one settings, and it is what the multiple in the headline compares against. Cost is everything billed to deliver a task — model tokens, research seats, crawl budget, and publishing — so a per-task floor survives even on the cheapest model.
We define and run this benchmark ourselves. Other harnesses ran with stock tooling and our prompting, so treat the ordering as directional rather than as a settled ranking of the harnesses.