· Ben · seo · 7 min
Write the comparison page without naming the competitor
How to write a comparison page that names the mechanism instead of the company, sources every claim, and lives in your repo where the diff shows exactly what changed.
I got as far as the H1 once. Contentcron vs — and then a company I respect, whose product I've used, whose founder posts things I read. I sat with it for a minute and closed the file.
It wasn't politeness that stopped me. It was arithmetic. Nobody is typing that query. There is no branded search demand for a comparison between two products that a combined few thousand people have heard of, and a page built to match a query that doesn't exist is just a page.
Every guide to writing a competitor comparison page for SEO gives you the same instructions: one page per rival, the competitor's name in the URL, the title tag, the H1 and above the fold. That advice is correct, and it rests on a condition none of those posts state out loud. Here's the condition, and here's the page you write when you don't meet it.
The named page works, and the numbers back it
Start by conceding, because the data is not close.
Passionfruit puts comparison-search conversion at 5–10%, against 1–2% for general organic traffic. Averi has comparison and alternatives keywords converting above 7.5%, regularly beating the fat category terms like "best accounting software." Grow and Convert's analysis of bottom-of-funnel content types found "versus" keywords with the second-highest average conversion rate, over 5%, and competitor-alternatives keywords converting highest of everything they measured, because the person searching is either an unhappy customer or building a shortlist. On one client they took 5 of 5 targeted comparison keywords into the top 3, in a space where competitors hadn't started writing these pages yet.
Sources: Passionfruit, "What's the Average Conversion Rate of Different SEO Keywords?" (bars use the conservative low end of its stated 5–10% and 1–2% ranges); Averi, "B2B Comparison Page SEO: Framework for VS & Alternatives Pages"; Grow and Convert, "How to Build Comparison Pages That Actually Win (Against Competitors With 100x Your Traffic)."
It works commercially, too. Founderpath's roundup credits Missive's honest us-versus-them pages, including the parts admitting where the other tool fits better, as a factor in reaching $2.1M ARR, and notes ClickUp built compare pages for every major competitor on the way past $25M bootstrapped.
So: write the named page. Put the name in the H1. All of that is right.
It requires one thing. Somebody, somewhere, has to be typing the other company's name next to yours.
It only works when the query exists
Powered by Search admits this in a single line and then moves on: some of their clients have no short-tail search volume at all for competitor-alternative keywords containing their brand name. That sentence is the whole problem for a new product, and I've never seen a post take it seriously.
The harder version is when there's no competitor to name in the first place. For most technical products the real alternative is a workflow, not a company. It's a freelancer who wrote four posts and stopped. It's a Notion doc called "content ideas Q2." It's a script someone on the team wrote to pipe a prompt into a model and paste the output into a file. It's nobody owning it, which is the most common one and the hardest to put in a /vs/ URL.
You can't rank for a query nobody types. People are searching around the tradeoff anyway. They just phrase it as a workflow.
The page you can actually write: approach versus approach
Triple Dart's own recommendation is to start with three pages: your top direct competitor, your biggest "alternative-to" opportunity, and one category comparison that frames your differentiation. They spend the article on the first two. The third one is the page I'm arguing for, and it deserves to be treated as its own type rather than a leftover.
A category comparison compares approaches. Not companies. The queries are shaped like workflows: how to X without Y, is X worth automating, alternatives to doing X manually, should we hire a freelancer or. Lower volume per query, far less contested, and the searcher is doing the exact thing a comparison page is for: choosing between two ways of getting something done.
It also sidesteps a distinction the named-page playbook keeps blurring. A vs-page serves someone evaluating two named options with tabs open. An alternatives page serves someone who has already decided they dislike one of them. An approach page serves someone earlier than both, who hasn't picked a vocabulary yet, and who will use whatever words you give them for the rest of their search.
Name the mechanism, not the company
Here's the rule that makes the page work: every row is something you can point at. A branch name, a permission scope, a cron expression, a file. Not an adjective.
Adjectives are why comparison tables read as untrustworthy. "Flexible," "powerful," "enterprise-grade" and a column of green checks. Nobody believes a table you win every row of. A checklist where you happen to win every category was written backwards from the conclusion.
Mechanisms are checkable. Ours are things like: the article arrives as a pull request on a contentcron/<slug> branch, not as text in a prompt box you have to copy somewhere. Figures are SVG charts with the source printed inside the image, or they don't get made. The schedule is a cron expression, 0 6 * * *, not "when someone remembers." The GitHub App is scoped to contents and pull requests on repos you pick, with no clone.
You can critique the category without naming anyone in it, and it's usually sharper. Every AI content tool I've tried illustrates posts with stock photos or AI art, and you can smell it instantly. That's a claim about a tell. A reader who has seen the tell will finish the sentence for you.
Every claim gets a source and a date, or it gets cut
The reason nobody wants to write these pages honestly is that competitor facts rot. Their pricing changed in March. The feature you say they lack shipped in June. Your table is still asserting both, in the present tense, on a page indexed by Google.
The standard advice for this is a calendar reminder. Triple Dart says refresh every 90 days at minimum. Founderpath frames it as ongoing. That's a nudge. It doesn't tell you which of the eleven rows went stale.
It's also where the legal question lives, and the SERP's answer to that is a shrug. Using a competitor's trademark in comparative advertising is generally fine under nominative fair use. INTA's conditions are that the product isn't readily identifiable without the mark and that you use only as much of the mark as is reasonably necessary. Dykema's primer says the same. Outside GC adds the operational part: the comparison has to be apples-to-apples, and any assumed facts have to be stated clearly and visibly, which is why they suggest running it past counsel before you publish.
Read that carefully and the constraint is not naming. It's truth. A comparison table is a set of factual assertions with an expiry date on each one. A claim without a source and a date isn't a comparison, it's a liability with a table around it.
So each row carries where the fact came from and when you checked it. If you can't produce both, the row doesn't ship. Not softened, cut.
Disqualify someone on the page
The highest-trust block on a comparison page is the one that sends people away.
Rock the Rankings gets at this from the SEO side: these pages help buyers work out whether they're the right fit, which means they filter out the customers who would have churned in four months. Missive's version is blunter, admitting outright where the other product suits you better, and their CEO credits that honesty as part of what got them to $2.1M ARR.
The sentence shape matters. Make it a specific if-clause, not a hedge. Ours: if your content strategy runs on search-volume spreadsheets, we're not your tool. If your blog lives in a database-backed CMS, there's no file to open a pull request against and we're not there yet. Both of those disqualify real buyers. Both of them are why the rest of the page is believable.
Ship it like code
Every article about comparison pages assumes a marketing team editing a landing page in a CMS. Which means none of them can answer the only maintenance question that matters: what changed, when, and who approved it.
Put the page in the repo as MDX. Then the 90-day refresh stops being a reminder and becomes a diff. A claim changes, you see the row in the pull request, in red and green, with the source line right next to it. git blame tells you when the price in that cell was last true and which PR asserted it. The reviewer approving the change is looking at exactly the sentence that changed, which is the entire argument for reviewing content the way you review code.
When to name them after all
This isn't dogma. There are three conditions where you should write the named page and stop hedging.
The first is evidence. If Search Console already shows impressions for [you] vs [them], the query exists and you're leaving it to a review site. That's the same Search Console API pull you'd use to find your decayed posts, filtered on queries containing the competitor's name.
The second is arrival context. Genesys Growth calls burying the competitor's name below the fold a critical error, because the visitor landed with several tabs open and needs immediate confirmation they're on the right page. If that's your reader, name the company in the first line.
The third is when someone else already ranks for the comparison and did a worse job of it.
And one caution worth keeping even then. Crayon points out that a comprehensive competitor list introduces prospects to brands they hadn't considered, which is why their own advice is to strip rival logos and skip links to their sites. A comparison page is free distribution for whoever is in it.
If you're pre-category, if the thing you're really competing with is a habit rather than a company, the honest page is the one that describes the tradeoff and lets the reader place themselves in it. Write that one. Give every row a source and a date, put it in the repo, and let the diff prove it stayed true.
If you'd rather that page, and the next thirty, showed up as pull requests you review instead of documents you keep meaning to write, the first article is free, no card required.