Skip to main content
business6 min read

Why We Chose Affiliate Links Over Display Ads (and the Revenue Math Behind It)

When we launched SmartReview, we had to pick a monetization model. Display ads were the obvious...

Updated
Editor-in-ChiefHuman reviewed
5 min read

When we launched SmartReview, we had to pick a monetization model. Display ads were the obvious choice u2014 easy to implement, predictable CPMs. We went with affiliate links instead.

Six months in, that decision is generating 4x more revenue per page than display ads would have. Here's the math and the reasoning.

The Display Ads Baseline#

For a comparison/review site with our traffic profile, display ad networks typically offer:

MetricTypical Value
CPM (programmatic)$2-5
Fill rate85-95%
Ads per page3-5
Revenue per 1K pageviews$6-20

With 500K monthly pageviews, that's roughly $3K-$10K/month from display ads. Not bad, but there's a ceiling u2014 and display ads actively harm the user experience on comparison pages.

The Affiliate Model#

Comparison pages have a unique advantage: visitors are in buying mode. When someone lands on "AirPods Pro vs Sony WF-1000XM5," they're typically ready to purchase within 24-48 hours.

Our affiliate metrics:

MetricOur Performance
Click-through rate to retailer8.2%
Conversion rate (post-click)3.4%
Average order value$180
Average commission rate4.5%
Revenue per 1K pageviews$25-45

With the same 500K pageviews: $12.5K-$22.5K/month. That's 2-4x the display ad revenue.

Why Comparison Pages Convert Better#

The 8.2% CTR and 3.4% conversion rate are well above industry averages (typically 1-3% CTR, 1-2% conversion). Three factors drive this:

1. Intent Alignment#

Our visitors have already decided what to buy u2014 they're choosing which one. The affiliate link is the natural next step, not an interruption.

2. Trust Transfer#

After reading a detailed, data-backed comparison, users trust the recommendation. When we say "Pick the Sony if noise cancellation is your priority" and link to the Sony product page, users follow through.

3. Price Transparency#

We show current prices from multiple retailers. Users click through knowing exactly what they'll pay, which reduces bounce rate on the retailer's site.

The Technical Implementation#

Our affiliate link system is more sophisticated than just dropping Amazon links:

interface AffiliateLink {

retailer: string; // amazon, bestbuy, walmart, etc.

productUrl: string; // direct product page URL

affiliateTag: string; // our affiliate ID

currentPrice: number; // live price (updated every 4 hours)

inStock: boolean; // availability check

shippingEstimate: string; // "Free 2-day" etc.

}

function buildAffiliateCTA(

product: Product,

links: AffiliateLink[]

): AffiliateCTAProps {

// Sort by: in-stock first, then lowest price

const sorted = links

.filter(l => l.inStock)

.sort((a, b) => a.currentPrice - b.currentPrice);

return {

primaryLink: sorted[0], // Best price, in stock

alternativeLinks: sorted.slice(1), // Other retailers

priceRange: {

low: sorted[0]?.currentPrice,

high: sorted[sorted.length - 1]?.currentPrice,

},

lastUpdated: new Date(),

};

}

Multi-Retailer Strategy#

We don't just link to Amazon. Showing prices from multiple retailers:

  1. Increases trust u2014 users see we're not biased toward one store
  2. Captures more clicks u2014 some users prefer Best Buy or Walmart
  3. Hedges risk u2014 if one affiliate program changes terms, we're diversified
  4. Improves conversion u2014 users can pick their preferred retailer
function PriceComparison({ links }: { links: AffiliateLink[] }) {

return (

<div className="price-comparison">

<h3>Where to buy</h3>

{links.map(link => (

<a

key={link.retailer}

href={link.productUrl}

className="retailer-link"

data-retailer={link.retailer}

onClick={() => trackAffiliateClick(link)}

>

<span className="retailer-name">{link.retailer}</span>

<span className="price">${link.currentPrice}</span>

<span className="shipping">{link.shippingEstimate}</span>

{link.currentPrice === lowestPrice && (

<span className="badge">Best Price</span>

)}

</a>

))}

</div>

);

}

Where you put affiliate links matters as much as having them. Our highest-converting placements:

PlacementCTRNotes
Verdict section CTA12.1%After the recommendation
Price comparison widget9.8%Shows all retailers
Inline "check price" links6.3%Within spec comparisons
Sticky bottom bar5.1%Always visible on mobile
Hero section buttons3.2%"View on Amazon" etc.

The verdict section CTA converts best because it appears right after we've made the case for one product over the other. The user has context and conviction u2014 the link is the natural action.

Tracking and Attribution#

We track every affiliate click with custom events:

function trackAffiliateClick(link: AffiliateLink) {

// Internal analytics

analytics.track("affiliate_click", {

retailer: link.retailer,

product: link.productUrl,

price: link.currentPrice,

placement: getCurrentPlacement(),

comparisonSlug: getPageSlug(),

});

// Store for attribution

localStorage.setItem("last_affiliate_click", JSON.stringify({

timestamp: Date.now(),

retailer: link.retailer,

product: link.productUrl,

}));

}

This lets us answer questions like:

  • Which comparison pages generate the most affiliate revenue?
  • Which product categories have the highest conversion rates?
  • Does showing 3 retailers vs 5 affect CTR?
  • What's the optimal number of affiliate CTAs per page?

The Brand Partnership Layer#

Affiliate revenue is our baseline. On top of that, we're building a brand partnership program:

TierPriceWhat Brands Get
Enhanced Profile$500/moLogo, brand story, verified specs on comparison pages
Sponsored Comparison$1,000/moFeatured placement, custom angles, lead capture
Category Sponsorship$2,000/moOwn all comparisons in a category

This doesn't replace affiliate links u2014 it layers on top. A brand paying for an Enhanced Profile still generates affiliate clicks. The partnership fee is incremental revenue.

Display Ads: When They Make Sense#

Display ads aren't always wrong. They work better when:

  • Traffic is informational, not transactional (blog posts, guides)
  • Products aren't easily linked (B2B comparisons, abstract topics)
  • Affiliate programs don't exist for your product category
  • You need minimum viable revenue while building affiliate relationships

We use display ads on our blog content where affiliate intent is low. But on comparison pages u2014 never.

Key Takeaways#

  1. Match monetization to intent. Comparison pages = buying intent = affiliate links. Blog posts = informational intent = display ads.
  2. Show multiple retailers. It builds trust and captures more clicks.
  3. Place CTAs after conviction. The verdict section converts 3x better than the hero.
  4. Track everything. You can't optimize what you don't measure.
  5. Layer revenue streams. Affiliate + brand partnerships > either alone.

The bottom line: if your content helps people make purchase decisions, affiliate links will outperform display ads every time.

---

Part 9 of our "Building SmartReview" series. Previous: Part 8: Entity Resolution at Scale

Share this article

Share:

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