Bookmaker Odds Comparison
Bookmaker Odds Comparison
The bookmakerOddsComparison widget renders a per-event 1x2 odds-comparison table across multiple bookmaker brands, served from the per-event snapshot pre-aggregated by the odds-pipeline-worker. Each row is a clickable affiliate link (/go/<cloakedLink>) wrapping logo + brand name + the 1 / X / 2 price cells.
Key features:
- Cross-provider odds: one row per configured brand, side-by-side prices for the 1, X, and 2 outcomes. Inactive brands are hidden entirely (no greyed-out rows).
- Affiliate-funnel CTA: each row is a single semantic
<a> to the brand’s cloaked tracking link. Optional widget-level CTA button via ctakey / ctatext attributes.
- Editorial copy via configuration JSON:
title, subtitle, and the event identity live in the configuration attribute; CTA + layout (fullwidth) live on top-level attributes the same way as ctabuttonlogo7.
- Tracking-link strategy (
tlTarget): switch between the default Vulcan cloaked links and the RBO legacy-id links without changing anything else.
The configuration attribute is a JSON object containing the event id, market, brands array, and optional title/subtitle. CTA + fullwidth are top-level attributes (NOT inside the JSON), matching the convention used by other CTA-bearing widgets.
Tracking-link strategy (tlTarget + per-brand legacyId)
The tlTarget top-level attribute controls how every affiliate link in the widget (brand logo, each odds cell, and the BET NOW button) is built:
tlTarget |
Link form |
Notes |
vulcan (default) |
/go/<cloakedLink>?country=…&language=…&wid=… |
Standard Vulcan cloaked-link strategy. Used when tlTarget is omitted. |
rbo |
/go/<legacyId>.html |
RBO legacy strategy. Uses each brand’s legacyId; no query params are appended. |
- The value is case-insensitive (
RBO, Rbo, rbo all work) and any unrecognized value falls back to vulcan.
- For
rbo, each brand’s legacyId is read from the brands[] entry in the configuration JSON (it falls back to the brand’s Sanity reference legacyId when omitted). If no legacyId can be resolved for a brand, that link safely falls back to the Vulcan form.
legacyId is ignored when tlTarget is vulcan, so it is harmless to always include it.
Full attributes (all options)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","legacyId":"RabonaSport","provider":"altenar"},{"cloakedLink":"royalistplay-sports","legacyId":"RoyalListPlaySport","provider":"delasport"},{"cloakedLink":"1bet-sports","legacyId":"1BetSport","provider":"bahigo"},{"cloakedLink":"legendplay-sports","legacyId":"LegendPlaySport","provider":"altenar"}],"title":"Cross-bookmaker odds","subtitle":"Compare prices across all your favourite sportsbooks"}'
ctakey="bookmaker-odds-cta-bet-now"
ctatext="Bet now"
fullwidth="true"
anchorid="bookmaker-odds-full"
tlTarget="vulcan"
country="UK"
language="en"></nw-blocks>
Minimal attributes (defaults applied)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","brands":[{"cloakedLink":"rabona-sports","provider":"altenar"},{"cloakedLink":"1bet-sports","provider":"bahigo"}]}'
country="ZZ"
language="en"></nw-blocks>
With CTA translation key (resolved server-side via i18n)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","provider":"altenar"},{"cloakedLink":"royalistplay-sports","provider":"delasport"},{"cloakedLink":"1bet-sports","provider":"bahigo"},{"cloakedLink":"legendplay-sports","provider":"altenar"}],"title":"Today's headline match","subtitle":"World Cup 2026"}'
ctakey="bookmaker-odds-cta-bet-now"
country="de"
language="de"></nw-blocks>
With CTA literal text (no translation lookup)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","provider":"altenar"},{"cloakedLink":"1bet-sports","provider":"bahigo"}],"title":"Best odds, side by side"}'
ctatext="Claim your best odds now"
country="fr"
language="fr"></nw-blocks>
Fullwidth layout
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","provider":"altenar"},{"cloakedLink":"royalistplay-sports","provider":"delasport"},{"cloakedLink":"1bet-sports","provider":"bahigo"},{"cloakedLink":"legendplay-sports","provider":"altenar"}],"title":"Compare odds","subtitle":"Full-width banner layout"}'
ctakey="bookmaker-odds-cta-bet-now"
fullwidth="true"
country="UK"
language="en"></nw-blocks>
RBO tracking links (tlTarget="rbo")
Set tlTarget="rbo" and provide a legacyId for each brand. Every affiliate link in the widget (brand logo, odds cells, and the BET NOW button) is then built as /go/<legacyId>.html instead of the Vulcan /go/<cloakedLink> form.
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","legacyId":"RabonaSport","provider":"altenar"},{"cloakedLink":"royalistplay-sports","legacyId":"RoyalListPlaySport","provider":"delasport"},{"cloakedLink":"1bet-sports","legacyId":"1BetSport","provider":"bahigo"},{"cloakedLink":"legendplay-sports","legacyId":"LegendPlaySport","provider":"altenar"}],"title":"Cross-bookmaker odds","subtitle":"RBO tracking strategy"}'
ctakey="bookmaker-odds-cta-bet-now"
ctatext="Bet now"
fullwidth="true"
tlTarget="rbo"
country="UK"
language="en"></nw-blocks>