Migration Notice: We are transitioning from <bw-widget> to <nw-blocks> tags. While both are currently supported for backward compatibility, <nw-blocks> is now the recommended tag for all new implementations. Existing <bw-widget> implementations will continue to function.
Geo Banner 2 is an enhanced version of the geo-targeting banner widget with improved TypeScript implementation and optimized rendering. It provides the same geo-aware promotional banner functionality with refined performance characteristics and better type safety.
Key Features:
| Attribute | Type | Required | Default | Description |
|---|---|---|---|---|
id |
string | Yes | - | Must be “geobanner2” |
bannerID |
string | Yes | - | Unique banner identifier from CMS |
language |
string | No | “en” | ISO 639-1 language code for banner content |
country |
string | No | “ZZ” | ISO 3166-1 country code for geo-targeting |
trackinglinktarget |
string | No | "" | Tracking parameter for analytics |
target |
string | No | “_blank” | Link target attribute (how link opens) |
rel |
string | No | “nofollow” | Link rel attribute for SEO control |
loading |
string | No | “lazy” | Image loading strategy (“lazy” | “eager”) |
fetchpriority |
string | No | “medium” | Image fetch priority (“high” | “low” | “medium”) |
Geo Banner 2 uses full TypeScript implementation:
Fetchpriority Strategy:
| Value | Use Case | Example |
|---|---|---|
| high | Critical above-the-fold banners | Hero sections, main promotions |
| medium | Important content (default) | Mid-page banners |
| low | Below-the-fold content | Footer, sidebar bottom |
Loading Strategy:
| Value | Behavior | Best For |
|---|---|---|
| eager | Load immediately | Above-the-fold banners |
| lazy | Load when near viewport | Below-the-fold content |
Automatic Optimization:
Country-Based:
country="ZZ" for global fallbackLanguage-Based:
URL Structure:
/go/{cloaked-link}/{tracking-target}?wid={widget-id}
Tracking Benefits:
<nw-blocks
id="geobanner2"
bannerID="hero-welcome-2025"
language="en"
country="UK"
fetchpriority="high"
loading="eager"
trackinglinktarget="hero-main"
rel="nofollow"
target="_blank" \>
</nw-blocks>
<nw-blocks
id="geobanner2"
bannerID="sidebar-bonus-offer"
language="en"
country="US"
loading="lazy"
trackinglinktarget="sidebar-right"
rel="nofollow" \>
</nw-blocks>
<!-- English UK -->
<nw-blocks
id="geobanner2"
bannerID="christmas-promo-en"
language="en"
country="UK"
trackinglinktarget="xmas-campaign" \>
</nw-blocks>
<!-- German -->
<nw-blocks
id="geobanner2"
bannerID="weihnachten-promo-de"
language="de"
country="DE"
trackinglinktarget="xmas-campaign" \>
</nw-blocks>
<!-- French -->
<nw-blocks
id="geobanner2"
bannerID="noel-promo-fr"
language="fr"
country="FR"
trackinglinktarget="xmas-campaign" \>
</nw-blocks>
<nw-blocks
id="geobanner2"
bannerID="mobile-app-download"
language="en"
country="CA"
loading="lazy"
trackinglinktarget="mobile-banner"
target="_blank" \>
</nw-blocks>
<nw-blocks
id="geobanner2"
bannerID="footer-newsletter"
language="es"
country="ES"
loading="lazy"
fetchpriority="low"
trackinglinktarget="footer-cta" \>
</nw-blocks>
<nw-blocks
id="geobanner2"
bannerID="partner-spotlight-2025"
language="en"
country="AU"
rel="sponsored nofollow"
trackinglinktarget="sponsored-banner" \>
</nw-blocks>
fetchpriority="high" and loading="eager"loading="lazy" and fetchpriority="low"country="ZZ")rel="nofollow" for affiliate banners (default)rel="sponsored" for paid promotional contenttarget="_blank" for external links (default)| Position | Fetchpriority | Loading | Use Case |
|---|---|---|---|
| Hero Section | high | eager | Main promotional banner |
| Top Content | high | eager | Important above-fold |
| Mid-Page | medium | lazy | In-content promotions |
| Sidebar | medium | lazy | Secondary content |
| Footer | low | lazy | Lowest priority banners |
<!-- Affiliate banner (default) -->
<nw-blocks id="geobanner2" bannerID="..." rel="nofollow" \></nw-blocks>
<!-- Sponsored content -->
<nw-blocks id="geobanner2" bannerID="..." rel="sponsored" \></nw-blocks>
<!-- Sponsored + nofollow combination -->
<nw-blocks id="geobanner2" bannerID="..." rel="sponsored nofollow" \></nw-blocks>
<!-- User-generated content -->
<nw-blocks id="geobanner2" bannerID="..." rel="ugc" \></nw-blocks>
<!-- Trusted partner -->
<nw-blocks id="geobanner2" bannerID="..." rel="follow" \></nw-blocks>
By Page Type:
<nw-blocks id="geobanner2" bannerID="..." trackinglinktarget="homepage" \></nw-blocks>
<nw-blocks id="geobanner2" bannerID="..." trackinglinktarget="review-page" \></nw-blocks>
<nw-blocks id="geobanner2" bannerID="..." trackinglinktarget="comparison" \></nw-blocks>
By Position:
<nw-blocks id="geobanner2" bannerID="..." trackinglinktarget="hero-section" \></nw-blocks>
<nw-blocks id="geobanner2" bannerID="..." trackinglinktarget="sidebar-top" \></nw-blocks>
<nw-blocks id="geobanner2" bannerID="..." trackinglinktarget="footer-banner" \></nw-blocks>
By Campaign:
<nw-blocks id="geobanner2" bannerID="..." trackinglinktarget="summer-2025" \></nw-blocks>
<nw-blocks id="geobanner2" bannerID="..." trackinglinktarget="black-friday" \></nw-blocks>
<nw-blocks id="geobanner2" bannerID="..." trackinglinktarget="welcome-bonus" \></nw-blocks>
| Feature | Geo Banner 1 | Geo Banner 2 |
|---|---|---|
| Implementation | JavaScript | TypeScript (FC) |
| Type Safety | Basic | Full TypeScript |
| Component Type | Regular function | Functional Component (FC) |
| Props Typing | Partial | Complete interface |
| Cache Key | Basic display | Conditional display |
| Error Handling | Standard | Enhanced with types |
| Performance | Optimized | Further optimized |
| Code Maintainability | Good | Excellent |
When to use Geo Banner 2:
When to use Geo Banner 1:
Banner configuration in Sanity CMS:
{
bannerID: "showcase-test-banners-20250909",
brand: {
name: "Casino Brand",
cloakedLink: "brand-casino"
},
image: {
url: "https://cdn.../banner-image.webp",
alt: "Promotional Banner"
},
targetCountries: ["UK", "US", "DE", "FR"],
targetLanguages: ["en", "de", "fr"],
startDate: "2025-09-09",
endDate: "2025-12-31",
isActive: true,
clickTrackingEnabled: true
}
Required Fields:
bannerID: Unique identifierbrand.cloakedLink: Brand linkimage.url: Banner image URLimage.alt: Accessibility textOptional Fields:
targetCountries: Geo-targetingtargetLanguages: Language variantsstartDate/endDate: Campaign schedulingisActive: Activation statusEnhanced caching strategy:
GEO_BANNER_2:{bannerID}:{country}:{language}If banner ID doesn’t exist:
If invalid attributes provided:
If banner unavailable for region:
All examples above use the new <nw-blocks> tag. For backward compatibility, you can still use <bw-widget>:
<!-- Old syntax (still supported) -->
<bw-widget
id="geobanner2"
bannerID="showcase-test-banners-20250909"
language="en"
country="ZZ"
rel="nofollow"
target="_blank"
trackinglinktarget="homepage" \>
</bw-widget>
<!-- New syntax (recommended) -->
<nw-blocks
id="geobanner2"
bannerID="showcase-test-banners-20250909"
language="en"
country="ZZ"
rel="nofollow"
target="_blank"
trackinglinktarget="homepage" \>
</nw-blocks>
Both tags work identically, but <nw-blocks> is recommended for all new implementations.