Links Added After Page Load
Why a hidden affiliate link is tagged normally but a link injected by a script may not be. Covers the difference between hidden and injected links, how to check whether your offer button carries the Click ID, and three ways to fix it.
AutoTag works on the links that are in your page. A link the visitor cannot see yet is still in the page — but a link that does not exist yet is not.
That distinction decides whether your offer button carries the Click ID. It matters most on VSL pages, where the buy button appears partway through the video, and on any page where a script builds the link.
Hidden Is Not the Same as Added Later
Section titled “Hidden Is Not the Same as Added Later”| Your link is… | Example | Tagged? |
|---|---|---|
| In the page, hidden with CSS | Offer button with display: none, revealed at 12:00 in the video | Yes — AutoTag treats it like any other link |
| In the page, below the fold or inside a collapsed section | Link in an accordion, FAQ, or tab the visitor has not opened | Yes |
| Added to the page by a script, after load | Button the video player inserts when the video ends | Verify — depends on how the script inserts it |
| Built by a JavaScript framework after data loads | Product list rendered by React or Vue once the API responds | Verify — see Single Page Tracking |
| Inside a modal that a script builds on click | ”Get the offer” popup constructed when the visitor clicks | Verify |
| Rendered inside the video player’s own iframe | CTA button drawn by an embedded player such as VTurb or converteai | Never — see below |
| Not a link at all | A button element that redirects with JavaScript | No — AutoTag needs a standard a element |
The first two cases need nothing from you. Revealing a hidden link changes nothing about its href — AutoTag already wrote the Click ID into it.
The middle cases are worth checking rather than assuming. Video platforms and page builders each insert elements differently, and the result varies.
The iframe case is different from all of them, and it is the one to rule out first.
Check the Iframe First
Section titled “Check the Iframe First”Some embedded video players draw the CTA button inside their own iframe rather than in your page. AutoTag runs in your page’s document and cannot reach inside an iframe, so a button rendered there is never tagged — no matter how long you wait or how the reveal is timed. The button could be there from the first millisecond and still receive nothing.
This matters because it looks identical to a timing problem, but nothing about timing, the Tracking Tag, or your integration settings will fix it.
How to tell in one step: put a plain HTML link to the same destination somewhere else on the page, outside the player, and load the page. If that link gets a Click ID and the player’s button does not, the button is inside the iframe. Stop checking your postback URL, your link format, and your checkout platform — none of them are involved.
Fix: put the Click ID on the page URL
Section titled “Fix: put the Click ID on the page URL”Most embedded players build their button URL from the query parameters on the page that hosts them. Put the Click ID there and the player carries it through.
Use the atclidToUrl command, with the parameter name your destination expects — cid for a Digistore24 checkout, for example, rather than the default _atid:
<script>AnyTrack(function() { AnyTrack('atclidToUrl', 'cid');});</script>Check Your Link in 30 Seconds
Section titled “Check Your Link in 30 Seconds”Load the page the way a visitor would
Open your landing page in a normal browser window. If you have been editing the page, use an incognito or guest window so you are not looking at a cached version.
Let the link appear
Play the video, open the popup, scroll — whatever the visitor does to make the offer button show up.
Copy the link address
Right-click the button and choose Copy link address. Paste it into a text editor.
Look for the Click ID
The URL should contain your network’s SubID parameter with a real value — tid or vtid for ClickBank, subId1 for Impact, sid for CJ, atclid for your own domains. The parameter list for every network is in Tracking Group ID.
A URL with no parameter, an empty parameter, or a literal --CLICK-ID-- still in it means the link was not tagged.
Fixes, Best First
Section titled “Fixes, Best First”Option 1 — Put the link in the page and hide it with CSS
Section titled “Option 1 — Put the link in the page and hide it with CSS”Instead of having a script create the button when the video ends, put the button in the page from the start and reveal it.
<!-- In the page from the start, hidden until the reveal --><a id="offer-cta" href="https://offer.com/product" style="display: none"> Get Instant Access</a>Your script then only changes the visibility, never the link itself:
document.getElementById('offer-cta').style.display = 'block';This is the most reliable option because it removes the timing question entirely. AutoTag tags the link at page load, and the reveal is purely cosmetic. Most video players and page builders support this — look for a “show existing element” option rather than “insert HTML”.
Option 2 — Use the --CLICK-ID-- token
Section titled “Option 2 — Use the --CLICK-ID-- token”If the link must be written by a script, include the token in the URL your script inserts. The Tracking Tag replaces it with the real Click ID:
<a href="https://offer.com/product?sub1=--CLICK-ID--">Get Instant Access</a>Replace sub1 with your network’s parameter. Verify the result with the copy-link test above — if the token is still literally in the URL after the link appears, the script inserted the link after the replacement had already run. Use option 3 instead.
Option 3 — Build the URL with the Click ID yourself
Section titled “Option 3 — Build the URL with the Click ID yourself”When your script fully controls the link, read the Click ID directly and write it into the URL. Wrap the call in the AnyTrack callback so it runs only once the Tracking Tag has finished loading:
AnyTrack(function() { var atclid = AnyTrack('atclid'); var offerUrl = 'https://offer.com/product?sub1=' + atclid;
// Use offerUrl when you create or reveal the button document.getElementById('offer-cta').href = offerUrl;});The callback matters. Calling AnyTrack('atclid') before the tag has loaded returns nothing, and you end up building a URL with an empty parameter — which looks tagged but attributes nothing.
The Click ID Is There but Conversions Still Are Not Attributed
Section titled “The Click ID Is There but Conversions Still Are Not Attributed”If the copied URL contains a valid Click ID, tagging is working and the problem is further down the chain. The usual cause is something between the click and the offer rebuilding the URL: a click tracker, a link shortener, or a redirect script that constructs the destination from a hardcoded value and drops everything AutoTag added.
The tell is that a page without that redirect attributes correctly while this one does not — which points at a script on this page, not at your account settings.
To confirm, open your browser’s network tab, click the button, and follow the redirect chain hop by hop until the parameter disappears. Every redirect in the path has to pass the full query string through. The full sequence is documented in Affiliate Click ID Journey.
FAQ & Troubleshooting
FAQ was last reviewed on 2026-07-29
My offer button only appears at the end of a 20-minute video. Will it be tagged?
My VSL button is drawn by the video player itself. Why does it never get a Click ID?
AnyTrack('atclidToUrl', 'your_parameter') so the player carries it through — see Append Click ID to URL.AutoScan says No elements found on my VSL page. Is my tracking broken?
The link still shows --CLICK-ID-- after it appears. What happened?
AnyTrack('atclid') inside the AnyTrack(function() { ... }) callback and set the href from your own script.Does this apply to links inside an accordion, a tab, or below the fold?
My site is a single page app and links render after the data loads. What should I do?
AnyTrack('atclid') if they are not tagged.