Landers
A lander sits between the ad and the offer. Roitrack can host it for you or send traffic to one you host elsewhere.
Hosted landers
Upload a ZIP with index.html at the root of the archive — not inside a subfolder. That’s the single most common upload mistake; if your ZIP contains mylander/index.html, re-zip from inside the folder.
Everything else in the archive — CSS, images, fonts, scripts — is served alongside it, so relative paths in your HTML keep working unchanged.
The lander is served from your tracking domain, and Roitrack injects a small script into the page at render time to wire up the CTA.
Wiring the CTA
The CTA has to point at Roitrack rather than straight at the offer, so the click is recorded and the visitor is routed by your flow rules. There are three ways, and they’re interchangeable — pick whichever fits the lander you have.
Placeholder in the HTML
Put one of these in your href. All three do the same thing:
<a href="{LP_URL}">Get started</a><a href="{offer}">Get started</a><a href="{lp_url}">Get started</a>Simplest option, and the right one for a static lander you’re editing by hand.
Data attribute
<a data-lp-click href="#">Get started</a>The injected script fills in the destination and attaches the handler on page load. Useful when the markup is generated and you can’t easily interpolate a placeholder.
JavaScript function
<button onclick="lp_click(event)">Get started</button>Call lp_click(event) from your own code. This is the one to use when the CTA runs validation, a quiz step, or an animation first.
External landers
Paste the URL instead of uploading. Roitrack redirects to it and records the lander view.
The CTA on an externally hosted lander has to link back to your tracker for the click-through to register. Which URL to use is shown on the lander screen once you save it — put that in the CTA’s href.
You lose nothing in reporting by hosting externally. You do take on the page speed and uptime of wherever it’s hosted, which is the usual reason people move landers onto the tracker.
Preview
Preview renders the lander exactly as a visitor sees it, including the injected script. Use it to confirm assets resolve and the CTA points somewhere sensible before sending paid traffic.
A preview click doesn’t attribute to a real campaign, so it won’t dirty your reports.
How landers show up in reports
| Metric | Meaning |
|---|---|
| LP views | Unique visitors who saw the lander |
| LP clicks | Visitors who clicked the CTA |
| LP CTR | LP clicks ÷ LP views |
A low LP CTR with healthy traffic usually means the CTA isn’t wired up rather than that the page is unpersuasive — check that first. If LP views are counting but LP clicks are flat zero, that’s almost certainly a broken CTA. See Metrics & counting rules.
Direct-to-offer campaigns have no lander, so all three read zero.
Rotating multiple landers
A flow can hold several landers with weights, splitting traffic between them. Set a lander’s weight to 0 to keep serving visitors already on it while sending no new uniques — that’s how you retire a variant without cutting off traffic mid-session.
Backing them up
Uploaded lander files live in their own Docker volume and are not included in backup.sh. If you host landers on the tracker, back that volume up separately — see Backup & restore.