Tag Migration Notice: This widget uses the legacy bw-widget tag. For new implementations, please use <nw-blocks> tags instead. The bw-widget tag remains supported for backward compatibility.
The SingleBrandBanner2 widget displays a full-width promotional banner featuring a single brand with logo, bonus text, a customizable background image, and a call-to-action button. Unlike its predecessor (singlebrandbanner), this widget supports two data sources:
cloakedlink): fetches a specific brand directlysellingpointtype + product): picks a brand from a toplist by positioncloakedlink presenceNote: To simulate mobile rendering, use browser DevTools (F12 → Toggle device toolbar) or a mobile User-Agent. The widget automatically selects the mobile background image based on the User-Agent header.
| Condition | Source | GQL Query | KV Query |
|---|---|---|---|
cloakedlink is provided |
Brand | brandVulcanQuery |
brandVulcanQuery |
cloakedlink is empty/missing |
Toplist | vulcanTopsQuery |
vulcanTopsQuery |
cloakedlinkwebsiteId + sellingPointTypebrandposition index (0-based)null if product is not defined (required for toplist source)| Attribute | Type | Required | Default | Description |
|---|---|---|---|---|
id |
string | Yes | - | Must be "singlebrandbanner2" |
cloakedlink |
string | No* | "" |
Brand identifier. If set, uses Brand source |
sellingpointtype |
string | No* | "general" |
Toplist selling point type (used when no cloakedlink) |
product |
string | Yes (toplist) | "" |
Product code (CA/SB/BI/PO/LO/LI/FN/ES/CR/CF/ST) |
backgroundimage |
string | No | "" |
Background image code (e.g., “football”, “tennis”) |
brandposition |
number | No | 0 |
0-based index of brand to pick from toplist |
fullwidth |
boolean | No | false |
Whether banner spans full width |
language |
string | No | "en" |
Language code (ISO 639-1) |
country |
string | No | "" |
Country code (ISO 3166-1) |
ctatext |
string | No | - | Override CTA button text (bypasses translation) |
ctakey |
string | No | "cta-claim-bonus" |
Translation key for CTA button text |
ctacolors |
string/JSON | No | ["#05842A", "#05842A"] |
CTA button gradient colors |
ctahovercolors |
string/JSON | No | ["#096725", "#096725"] |
CTA button hover gradient colors |
trackinglinktarget |
string | No | "" |
Tracking link target path segment |
target |
string | No | "_blank" |
Link target attribute |
rel |
string | No | "nofollow" |
Link relationship attribute |
referer |
string | No | - | Referrer identifier for attribution |
channel |
string | No | - | Channel identifier (e.g., “pu”) |
anchorid |
string | No | "" |
HTML anchor ID for the widget |
showterms |
string | No | - | Display T&C disclaimer below CTA. Set to "yes" to show, omit or "no" to hide |
*Either cloakedlink OR sellingpointtype + product is required.
Background images are managed in Sanity CMS under the key single-brand-banner2. Each asset has:
backgroundimage attribute (e.g., “football”, “tennis”)The widget automatically detects the device type via the User-Agent header:
mobileImagedesktopImage| Code | Description |
|---|---|
football |
Football/soccer themed background |
tennis |
Tennis themed background |
Additional codes can be added via Sanity CMS without code changes.
The scope returns a unified SingleBrandBanner2Result object regardless of the data source:
{
brandId: string; // Brand legacy ID or cloaked link
isActive: boolean; // Whether brand is active for user's country
imgUrl: string; // Brand logo image URL
trackingLink: string; // Brand cloaked link for tracking
brandName: string; // Brand display name
bonus: string; // Formatted bonus amount (e.g., "500 €")
bonusText?: string; // Primary bonus description text
additionalBonusText?: string; // Secondary bonus text
bonusExtra: string; // Extra bonus message
extraFreespins?: number; // Free spins count
alt: string; // Image alt text
ctaText?: string; // Resolved CTA button text
ctaColors?: string[]; // CTA gradient colors
ctaHoverColors?: string[];// CTA hover gradient colors
target: string; // Link target (_blank, _self, etc.)
rel: string; // Link rel attribute
trackingTarget: string; // Tracking target segment
trackingData: string; // Additional tracking data
hideBonuses: boolean; // Compliance: hide all bonus info
hideBonusRibbon: boolean; // Compliance: hide bonus ribbon
hideBonusText: boolean; // Compliance: hide bonus text
minimumAge?: string; // Minimum age requirement
backgroundImage?: string; // Resolved background image URL
fullwidth?: boolean; // Full-width flag
channel?: string; // Channel identifier
country: string; // Resolved country code
language?: string; // Language code
referer?: string; // Referrer for attribution
anchorid?: string; // HTML anchor ID
product?: string; // Product code
sellingPointType?: string;// Selling point type
complianceDisclaimer?: object; // T&C disclaimer object (present when showterms="yes")
}
All clickable elements use the following tracking URL:
/go/{trackingLink}/{trackingTarget}?wid=singlebrandbanner2&trackingData={trackingData}&referer={referer}&channel={channel}
Example:
/go/greatwin-casino/banner-hero?wid=singlebrandbanner2&trackingData=&referer=review-page&channel=pu