How we built SmartReview's comparison engine to serve 50K+ monthly "X vs Y" searches u2014 and what we learned along the way.
---
If you've ever searched "AirPods vs Sony WF-1000XM5" or "Roomba vs Roborock," you've seen comparison content. Most of it is mediocre u2014 walls of text that don't actually help you decide.
We built SmartReview to fix that. Here's the technical architecture behind our AI-powered comparison engine.
The Problem#
Comparison searches ("X vs Y") represent a massive, underserved search intent:
- "AirPods vs Sony" u2014 50,000+ monthly searches
- "Roomba vs Roborock" u2014 30,000+ monthly searches
- "Nespresso vs Keurig" u2014 25,000+ monthly searches
Users want structured, scannable answers u2014 not 2,000-word essays. They want to know: which one should I buy, and why?
Architecture Overview#
u250cu2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2510
u2502 Discovery Layer (DataForSEO + Tavily) u2502
u2502 u2192 Identifies high-volume "vs" keywords u2502
u2502 u2192 Scores by volume u00d7 (100 - difficulty) u2502
u2514u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u252cu2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2518
u25bc
u250cu2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2510
u2502 Enrichment Layer (Tavily + Web Scraping) u2502
u2502 u2192 Fetches real-time specs, pricing, reviewsu2502
u2502 u2192 Aggregates from 5+ review sources u2502
u2514u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u252cu2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2518
u25bc
u250cu2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2510
u2502 Generation Layer (Claude API) u2502
u2502 u2192 Structured comparison with key diffs u2502
u2502 u2192 Short verdict + detailed breakdown u2502
u2502 u2192 FAQ generation from PAA data u2502
u2514u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u252cu2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2518
u25bc
u250cu2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2510
u2502 Serving Layer (Next.js + PostgreSQL) u2502
u2502 u2192 ISR for fresh content u2502
u2502 u2192 JSON-LD structured data u2502
u2502 u2192 Redis cache for API responses u2502
u2514u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2500u2518
Structured Data for Comparison Content#
Google doesn't have a dedicated "Comparison" schema, but we combine several schema types for rich results:
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "AirPods Pro 2 vs Sony WF-1000XM5",
"description": "Detailed comparison of AirPods Pro 2 and Sony WF-1000XM5 across sound quality, ANC, battery life, and price.",
"mainEntity": {
"@type": "ItemList",
"itemListElement": [
{
"@type": "Product",
"name": "Apple AirPods Pro 2",
"brand": { "@type": "Brand", "name": "Apple" },
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "12453"
}
},
{
"@type": "Product",
"name": "Sony WF-1000XM5",
"brand": { "@type": "Brand", "name": "Sony" },
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "8921"
}
}
]
}
}
This gives us Product rich results with ratings directly in SERPs u2014 a significant CTR boost.
The AI Generation Pipeline#
The key insight: AI-generated comparisons are only as good as the data you feed them.
Our pipeline:
- Parallel enrichment u2014 We run 3 Tavily searches simultaneously: "A vs B comparison 2026", entity A specs, entity B specs
- Review aggregation u2014 Pull ratings from Reddit, G2, Amazon, Wirecutter, and RTINGS
- Structured prompt u2014 Claude generates a comparison with enforced sections: short answer, key differences (5-7), detailed breakdown by attribute, verdict, FAQs
- Fact verification u2014 Cross-reference generated specs against enrichment data
The result: comparison pages that are factually grounded, consistently structured, and immediately useful.
SEO Results#
After 3 months of publishing structured comparisons:
- 40% of pages rank in top 10 for their target "vs" keyword
- Average time on page: 3.2 minutes (vs. 1.4 for generic blog content)
- FAQ sections capture 15% of our organic traffic via PAA features
What We'd Do Differently#
- Start with fewer categories u2014 we launched across 10 categories simultaneously. 3-4 would have let us iterate faster.
- Invest in entity resolution early u2014 "AirPods Pro 2" vs "AirPods Pro (2nd gen)" vs "Apple AirPods Pro 2" are all the same product. Building a proper entity graph saved us months of duplicate content.
- User signals matter more than content volume u2014 50 comparisons with high engagement beat 500 thin pages every time.
Try It Out#
Browse our comparisons at aversusb.net u2014 every page follows this architecture.
If you're building comparison content and want to discuss technical approaches, drop a comment below or find us on LinkedIn.
---
This post is part of our "Building SmartReview" series. Next up: how we handle real-time price tracking across 50+ retailers.
Share this article
Get the best comparisons in your inbox
Weekly digest of trending comparisons, new categories, and expert insights. No spam.
Join 1,000+ readers · Unsubscribe anytime