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.
The RecommendedBy widget displays a horizontally scrollable carousel of recommended casino or betting brands with their logos, ratings, and review links. Features smooth virtual scrolling on desktop (≥768px) and native touch scrolling on mobile, making it perfect for showcasing trusted brands, expert recommendations, and related casino suggestions.
Key Features:
| Attribute | Type | Required | Default | Description |
|---|---|---|---|---|
id |
string | Yes | - | Must be “recommendedby” |
recommendedID |
string | Yes | - | Recommended group identifier from CMS |
language |
string | No | “en” | ISO 639-1 language code |
country |
string | No | “ZZ” | ISO 3166-1 country code |
headingtext |
string | No | - | Custom heading text |
headinglevel |
string | No | “h1” | Heading level (h1, h2, h3, h4, h5, h6, p) |
headingalignment |
string | No | “Center” | Heading alignment (Left, Center, Right) |
textkey |
string | No | - | Translation key for brand link text |
text |
string | No | - | Custom text for brand links (overrides textkey) |
rel |
string | No | “nofollow” | Link rel attribute |
target |
string | No | “_blank” | Link target attribute |
trackinglinktarget |
string | No | - | Tracking link target parameter |
Display:
headingtext attributeSEO Considerations:
Desktop (≥768px):
Mobile (<768px):
Technical Implementation:
useVirtualHorizontalScroll(viewportRef, trackRef, {
minWidth: 768, // Activate on desktop only
ease: 0.1, // Smooth easing
amplify: 1.25 // Scroll amplification
});
Each brand card displays:
Logo Section:
Rating Section:
Review Link:
Card Structure:
{
cloakedLink: "brand-casino",
rating: 4.5,
imgSrc: "/brands/logo.png",
reviewLink: "/brand-casino-review",
text: "Read Review"
}
URL Structure:
/go/{cloakedLink}/{provider}?wid={widgetId}
Components:
cloakedLink: Brand identifierprovider: Tracking provider (default: “out”)wid: Widget ID for analyticsExample:
/go/fresh-casino/out?wid=recommendedby-123
Features:
Configuration:
{
minWidth: 768, // Only activate ≥768px
ease: 0.1, // Smoothing factor (lower = smoother)
amplify: 1.25 // Scroll speed multiplier
}
How It Works:
Features:
Benefits:
For WordPress and non-React environments:
const script = generateVirtualHorizontalScrollScript(
'#recommendedby-viewport',
'#recommendedby-track',
{
minWidth: 768,
ease: 0.1,
amplify: 1.25
}
);
Injects self-contained JavaScript for virtual scrolling functionality.
<nw-blocks
id="recommendedby"
recommendedID="homepage-featured-casinos"
language="en"
country="UK"
headingtext="Featured Online Casinos"
headinglevel="h2"
headingalignment="center"
text="Visit Casino" \>
</nw-blocks>
<nw-blocks
id="recommendedby"
recommendedID="similar-casinos-888"
language="en"
country="UK"
headingtext="Similar Casinos You Might Like"
headinglevel="h3"
headingalignment="left"
textkey="wgt-read-full-review" \>
</nw-blocks>
<nw-blocks
id="recommendedby"
recommendedID="best-live-casinos"
language="en"
country="UK"
headingtext="Best Live Dealer Casinos"
headinglevel="h2"
text="Explore Casino" \>
</nw-blocks>
<!-- English -->
<nw-blocks
id="recommendedby"
recommendedID="recommended-casinos-en"
language="en"
country="UK"
headingtext="Recommended Casinos"
text="Read Review" \>
</nw-blocks>
<!-- French -->
<nw-blocks
id="recommendedby"
recommendedID="recommended-casinos-fr"
language="fr"
country="FR"
headingtext="Casinos Recommandés"
text="Lire l'avis" \>
</nw-blocks>
<!-- Spanish -->
<nw-blocks
id="recommendedby"
recommendedID="recommended-casinos-es"
language="es"
country="ES"
headingtext="Casinos Recomendados"
text="Leer Reseña" \>
</nw-blocks>
<!-- German -->
<nw-blocks
id="recommendedby"
recommendedID="recommended-casinos-de"
language="de"
country="DE"
headingtext="Empfohlene Casinos"
text="Bewertung Lesen" \>
</nw-blocks>
<!-- Portuguese -->
<nw-blocks
id="recommendedby"
recommendedID="recommended-casinos-pt"
language="pt"
country="BR"
headingtext="Cassinos Recomendados"
text="Ler Avaliação" \>
</nw-blocks>
<nw-blocks
id="recommendedby"
recommendedID="top-sportsbooks"
language="en"
country="UK"
headingtext="Top Rated Sportsbooks"
headinglevel="h2"
text="View Sportsbook" \>
</nw-blocks>
<!-- New Jersey -->
<nw-blocks
id="recommendedby"
recommendedID="nj-approved-casinos"
language="en"
country="US"
headingtext="NJ Licensed Online Casinos"
text="Play Now" \>
</nw-blocks>
<!-- Pennsylvania -->
<nw-blocks
id="recommendedby"
recommendedID="pa-casinos"
language="en"
country="US"
headingtext="PA Legal Online Casinos"
text="Join Now" \>
</nw-blocks>
<nw-blocks
id="recommendedby"
recommendedID="editors-choice-2025"
language="en"
country="UK"
headingtext="Editor's Choice 2025"
headinglevel="h2"
headingalignment="center"
textkey="wgt-editors-pick-cta" \>
</nw-blocks>
<nw-blocks
id="recommendedby"
recommendedID="footer-partner-casinos"
language="en"
country="UK"
headingtext="Our Partner Casinos"
headinglevel="h4"
headingalignment="center"
text="Learn More" \>
</nw-blocks>
recommendedIDrel="nofollow" for affiliate linksModify scroll behavior via configuration:
// Smoother scrolling (lower ease)
{
minWidth: 768,
ease: 0.05, // Very smooth
amplify: 1.0 // Normal speed
}
// Faster scrolling
{
minWidth: 768,
ease: 0.15, // Less smooth
amplify: 1.5 // 1.5x speed
}
// Tablet and up
{
minWidth: 600, // Activate on tablets
ease: 0.1,
amplify: 1.25
}
<!-- Top recommendations -->
<nw-blocks
id="recommendedby-top"
recommendedID="top-tier-casinos"
headingtext="Top Tier Casinos"
headinglevel="h2" \>
</nw-blocks>
<!-- New casinos -->
<nw-blocks
id="recommendedby-new"
recommendedID="new-casinos-2025"
headingtext="New Casinos 2025"
headinglevel="h2" \>
</nw-blocks>
<!-- High rollers -->
<nw-blocks
id="recommendedby-vip"
recommendedID="high-roller-casinos"
headingtext="High Roller Casinos"
headinglevel="h2" \>
</nw-blocks>
Configure tracking provider in CMS:
websiteConfiguration: {
trackingLinkProvider: "out" // Default
// or: "homepage", "review", "bonus"
}
Define translation keys in i18n:
{
"wgt-recommendedby-cta": "Read Full Review",
"wgt-editors-pick-cta": "Editor's Choice",
"wgt-recommended-new": "New Casino",
"wgt-recommended-play": "Play Now"
}
Usage:
<nw-blocks
id="recommendedby"
recommendedID="..."
textkey="wgt-recommendedby-cta" \>
</nw-blocks>
Widget fetches recommended brands group:
{
recommendedID: "recommended-sb-www-localwebstite-com-general-brand",
isActive: true,
websiteConfiguration: {
trackingLinkProvider: "out"
},
recommendedBrands: [
{
cloakedLink: "fresh-casino",
brandName: "888 Casino",
rating: 4.7,
imgSrc: "https://cdn.example.com/brands/fresh-casino-logo.png",
reviewLink: "/888-casino-review",
text: "Read Review",
textKey: "wgt-read-review",
alt: "888 Casino Logo",
displayOrder: 1
},
{
cloakedLink: "leovegas-casino",
brandName: "LeoVegas Casino",
rating: 4.6,
imgSrc: "https://cdn.example.com/brands/leovegas-logo.png",
reviewLink: "/leovegas-casino-review",
text: "Read Review",
textKey: "wgt-read-review",
alt: "LeoVegas Casino Logo",
displayOrder: 2
},
{
cloakedLink: "betsson-casino",
brandName: "Betsson Casino",
rating: 4.5,
imgSrc: "https://cdn.example.com/brands/betsson-logo.png",
reviewLink: "/betsson-casino-review",
text: "Read Review",
textKey: "wgt-read-review",
alt: "Betsson Casino Logo",
displayOrder: 3
}
// ... more brands
]
}
Required Fields:
recommendedID: Group identifierisActive: Widget statusrecommendedBrands: Array of brand objectsBrand Object Fields:
cloakedLink: Brand identifier (required)rating: Star rating 0-5 (required)imgSrc: Logo URL (required)reviewLink: Review page URL (required)text: Link text (optional if textKey provided)textKey: Translation key (optional)alt: Logo alt text (required)displayOrder: Sorting order (optional)Optional Fields:
websiteConfiguration.trackingLinkProvider: Tracking providerbrandName: Brand name for referencetextKey: i18n translation keyRequired i18n keys:
{
"recommendedby-revue": "Read Review",
"wgt-read-review": "Read Review",
"wgt-read-full-review": "Read Full Review",
"wgt-visit-casino": "Visit Casino",
"wgt-play-now": "Play Now",
"wgt-editors-pick-cta": "Editor's Choice",
"wgt-recommendedby-cta": "Learn More"
}
Language-Specific Examples:
{
"en": {
"recommendedby-revue": "Read Review",
"wgt-visit-casino": "Visit Casino"
},
"fr": {
"recommendedby-revue": "Lire l'avis",
"wgt-visit-casino": "Visiter le Casino"
},
"es": {
"recommendedby-revue": "Leer Reseña",
"wgt-visit-casino": "Visitar Casino"
},
"de": {
"recommendedby-revue": "Bewertung Lesen",
"wgt-visit-casino": "Casino Besuchen"
},
"pt": {
"recommendedby-revue": "Ler Avaliação",
"wgt-visit-casino": "Visitar Cassino"
}
}
Recommended brands data is cached:
RECOMMENDED:{recommendedID}:{country}:{language}If widget is inactive:
<p id="inactive-brand" style="display: none;">
This widget is inactive or not allowed in this country.
</p>
Handling:
isActive flag in CMSIf no recommended brands:
recommendedBrands array in CMSMissing Logo:
Missing Rating:
Missing Review Link:
If JavaScript disabled:
| Feature | RecommendedBy | PuzzleTop | Hero2 |
|---|---|---|---|
| Display Type | Horizontal carousel | Vertical list | Single/multi-row |
| Scrolling | Virtual horizontal | Vertical page | No scroll |
| Brand Count | Multiple (carousel) | Multiple (list) | 1-4 |
| Rating Display | ✅ Stars | ✅ Stars | ✅ Stars |
| Review Links | ✅ Yes | ⚠️ Optional | ⚠️ Optional |
| Bonus Display | ❌ No | ✅ Yes | ✅ Yes |
| Use Case | Related recommendations | Top lists | Featured brand |
| Mobile | ✅ Touch scroll | ✅ Standard | ✅ Responsive |
When to use RecommendedBy:
When to use PuzzleTop/Hero:
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="recommendedby"
recommendedID="recommended-sb-www-localwebstite-com-general-brand"
language="en"
country="UK"
headingtext="Recommended Casinos"
headinglevel="h2"
headingalignment="center"
textkey="recommendedby-revue"
text="Read Review" \>
</bw-widget>
<!-- New syntax (recommended) -->
<nw-blocks
id="recommendedby"
recommendedID="recommended-sb-www-localwebstite-com-general-brand"
language="en"
country="UK"
headingtext="Recommended Casinos"
headinglevel="h2"
headingalignment="center"
textkey="recommendedby-revue"
text="Read Review" \>
</nw-blocks>
Both tags work identically, but <nw-blocks> is recommended for all new implementations.