The question every publisher asks first is whether the game can live inside their site rather than beside it. The answer is yes, by three different routes, and the choice between them is usually made on the wrong criterion.
Most buyers choose on integration effort. The right criterion is what each route does to your analytics, your search authority and your sharing loop, because those three decide whether the game grows.
The three routes
A JavaScript component. The game renders inside your page as part of your document. It inherits your styling, your analytics see it as your site, and your consent framework governs it. This is the cleanest route and the one to take wherever your platform allows a script or framework component.
A scoped iframe. The game runs in its own document inside a frame on your page. Your header, navigation, footer and branding surround it, and responsive behaviour is built to your breakpoints. This is the route where the host platform is locked down and will not accept third-party scripts.
A native component. For a React, Next or similar front end, a component your team imports and configures. Most control, most involvement from your developers.
| JavaScript component | Scoped iframe | Native component | |
|---|---|---|---|
| Lives on your domain | Yes | Frame content does not | Yes |
| Inherits your CSS | Yes | No – styled to match | Yes |
| Your analytics see it as your site | Yes | Partially, and it degrades | Yes |
| Consent and cookies governed by you | Yes | Split across two contexts | Yes |
| Deep links to game state | Yes | Constrained | Yes |
| Search engines index the content | Yes | No | Yes |
| Your developers’ effort | Low | Lowest | Highest |
| Where it applies | Most sites | Locked-down platforms | React, Next, similar |
The iframe problem nobody raises until month two
An iframe is the easiest thing to sell and the most expensive thing to live with, and the cost is not technical. It is growth.
Analytics attribution breaks first. The frame is a separate browsing context. Your existing tags see a page view and then nothing – no interactions, no funnel, no attribution back to the campaign that brought the user. You can bridge it with cross-frame messaging, but that is work, and it usually gets discovered after the first month’s reporting looks wrong.
Sharing breaks second, and it matters more. The single strongest growth mechanic in a season-long game is a private league invite. One person creates a league and brings colleagues and friends, and every one of them registers on your property. That loop depends on a link that opens directly on the join-league screen with the league already identified.
Inside an iframe, the address bar shows the parent page. The frame’s internal state is not in the URL, so the link a manager copies does not carry the league. They end up sending “go to this page, then click leagues, then search for mine,” and most of the people they send it to do not arrive. The invite loop is the cheapest acquisition channel a fantasy game has, and an iframe quietly turns it off.
Search authority goes third. Content inside a frame does not accrue to your domain, and neither does anything hosted on a vendor’s domain or a separate subdomain. If the game is a section of your site, the pages it generates – competition rules, scoring explanations, league pages – build authority for you. If it sits somewhere else, they build it for somebody else, or for nobody.
None of this makes the iframe wrong. Where a content management system will not accept a script, it is the correct answer, and the constraints are manageable if you know about them at scoping. They are not manageable if you find out in November.
Single sign-on is the biggest lever, and it is an embedding decision
The largest single change to participation is not the embedding method. It is whether your users have to register at all.
If your audience is already logged in to your site, the game should receive an authenticated token and let them in. No registration form, no second password, no drop-off at the exact moment their interest is highest. In our experience this is the single biggest lever on participation of anything in this list.
The mechanics differ by route. A component in your document can read your session directly. An iframe needs a token passed across the frame boundary and validated on the game side, which works but adds a handshake and a place for it to fail.
Two things to settle at scoping rather than during integration: what identifier the token carries, and what happens when a session expires mid-gameweek while someone is making a transfer.
Match-day load, and what it does to your infrastructure
Fantasy load is not steady. A Saturday afternoon with a full fixture list runs roughly forty times a quiet Tuesday, and the scoring engine is what buckles first if the architecture is wrong.
The relevant point for an embedding decision: the game’s peak should not become your site’s peak. Player-facing application, scoring engine and data layer scale independently of each other and of your site, with static assets served from a CDN and the admin panel isolated from the player-facing stack. Your page serves the component; the component talks to infrastructure sized for match day.
We have held 200,000 concurrent players at sub-40ms response times. The reason that number belongs in an embedding conversation rather than an architecture one is that it is what stands between a busy Saturday and your own homepage going down alongside the game.
Data protection improves when the game is on your domain
A frequently missed consequence, and it works in your favour.
When the game runs inside your site, your consent management platform governs it, your cookie policy covers it, and end-user data sits under your existing privacy notice. You are the controller. The platform vendor is the processor.
When it sits on a vendor’s domain, users cross a boundary they can see, they meet a second consent banner, and the controller question becomes something you have to explain in a privacy notice rather than something obvious. That is not fatal, but a UK or European procurement review will ask about it, and the embedded answer is materially simpler to give.
The mobile app
Everything above concerns the web. On mobile the same three-way choice appears as a webview, an embedded component, or a native build, and the tradeoffs run in the same direction: a webview is fastest to ship and weakest on session handling and deep links, a native component costs more and behaves properly.
The decision worth making early is whether an invite link opens the app for a user who has it installed. If it does not, the invite loop that already suffers inside an iframe suffers again on mobile, and mobile is where most invites are opened.
What we would ask before recommending a route
Four questions, and they take ten minutes.
What is your site built on, and will it host a third-party script or framework component? Do you have single sign-on, and can it issue a token to a component? Where does your analytics stack live, and what needs to see the game’s events? And is there a mobile app in scope, or web only?
With those four answers a route can be recommended specifically. Without them any vendor is guessing, and the guess is usually the iframe, because it is the one that works everywhere and the one whose costs arrive later.
Next: the routes above assume you have chosen a platform. If you have not, white-label vs custom fantasy sports platforms is the piece to read first. And once it is embedded, somebody has to run it – which is managed game operations.
Or: send us your stack and we will tell you which of the three routes fits, before either of us talks about a build.