Playbook · 4 min read

Using ValidVisit with Keitaro

Keitaro is self-hosted and has more ways than most trackers to get a visitor onto your page, which is what to check first. This guide covers where the script goes for local and external landers and the no-hop Tracking Script, a lander URL for a Taboola campaign, {subid} as the click ID, and the delivery modes that change what your page sees.

01 /

Where the script goes

Paste the ValidVisit snippet before </body> on the lander Keitaro’s flow sends visitors to. Where that page lives depends on the lander type:

  • Local landers. Keitaro serves the page itself, from your tracker domain.
  • External landing pages. For a page hosted elsewhere, Keitaro sends the visitor to the page’s own URL and appends _subid and _token.
  • No-hop. The ad points at your site, and Keitaro’s Tracking Script runs in <head>, beside the ValidVisit snippet.

The script only runs on hosts listed under Allowed domains in your ValidVisit site: add the page’s own domain, and your tracker domain if you use local landers. Preload and Action landers work differently; test them first.

02 /

The lander URL for a Taboola campaign

ValidVisit reads network values from the landing-page URL under its vv_* names. Taboola fills its macros into your Keitaro campaign URL, Keitaro’s campaign parameters store each value in a sub ID, and lander URLs read them back as {sub_id_1} to {sub_id_30}, or by alias, such as {site} for a parameter named site.

Say your campaign parameters store Taboola’s {site} (the site name) in sub_id_1 and {campaign_item_id} in sub_id_2; check yours. Add to the external landing page’s URL in Keitaro:

  • vv_source=taboola: names the network.
  • vv_publisher_id={sub_id_1}: the Taboola site, the unit you block.
  • vv_ad_id={sub_id_2}: the ad item.
  • clickid={subid}: Keitaro’s click ID.

Start the list with ? and join the pairs with &. With the Tracking Script the ad opens your page directly, so put Taboola’s macros on it, such as vv_publisher_id={site}, as the Taboola tracking tokens page lists them. A local lander may load at the campaign URL itself, in which case ValidVisit reads that URL’s parameters; test which values arrive.

03 /

Pass {subid} as the click ID

Keitaro’s click ID is {subid}. Pass it as clickid={subid} and ValidVisit stores it as the visit’s click ID: clickid, click_id and vv_click_id all fill that field. The _subid Keitaro appends to external landing pages is kept with the visit as an ordinary parameter; ValidVisit’s reports don’t read it as the click ID, so add clickid yourself.

Send one click ID. With clickid and vv_click_id both on the URL, the one later in the URL fills the field, so choose between Keitaro’s {subid} and Taboola’s {click_id}.

With the Tracking Script, Keitaro keeps the subid in a cookie, and it isn’t on the URL the ad opens. Pass Taboola’s click ID instead: vv_click_id={click_id}.

See your own channel judged the same way — join the early-access waitlist.

04 /

Read sites next to Keitaro’s reports

Keitaro reports by sub ID; ValidVisit shows the same sites under Publisher and ad items under Ad. They’re one source seen twice: Keitaro counts clicks and conversions, ValidVisit judges each visit that loaded the page Valid or Invalid, with its evidence.

  • Sites that convert but are judged invalid. Check the conversions before you scale; bot traffic that fires a conversion event looks profitable in any tracker.
  • Totals that differ. Keitaro records the click before the lander loads; ValidVisit counts visits that loaded the page with the script. Compare shares, not raw counts.
05 /

Keitaro’s bot filter and ValidVisit

Keitaro filters in its flows. The Bot filter checks each click against Keitaro’s bot database (crawlers, parsers, search bots) and the IP and user-agent lists you keep, and Keitaro recommends a forced flow that sends Bot = YES traffic to a separate bot page. The {is_bot} and {is_using_proxy} placeholders expose its verdicts.

That catches known bots at the click; ValidVisit grades each visit that reaches your lander, by site. To compare the two, add kt_bot={is_bot} to the lander URL: ValidVisit keeps parameters it doesn’t recognise with the visit, so you can break its report down by Keitaro’s flag. Tracker bot filters vs ValidVisit covers the difference in full.

06 /

Block the sites in Taboola

ValidVisit never changes your Keitaro flows or your Taboola account, and sends nothing into Keitaro. It ranks sites worst first and exports the ones worth cutting as a Cut-list CSV. In Taboola, add them under the campaign’s Set-Up → Advanced Options → Block Sites, or upload them in bulk; blocking publishers in Taboola has the steps and the 1,500-site cap, and blocking bad sources by network covers other networks.

We found no Keitaro rule that pauses a network’s sites; its Admin API is there for automation you build yourself.

For visitors you never want on the page, ValidVisit’s traffic rules tag visits by country, data-center hosting or VPN and can send them to another page; whole countries can also be blocked at your own firewall. The verdict itself blocks nothing.

07 /

Delivery modes to test

Keitaro can move a visitor to the next page in several ways, and some change what your lander sees:

  • CURL mode. Keitaro fetches the page and serves it itself, which can put it on the tracker’s domain; that domain then has to be in Allowed domains.
  • iframe mode. The page shows inside a frame. Check that the visit reaches ValidVisit with its parameters.
  • Blank-referrer and double meta modes. Both clear the referrer before the lander. ValidVisit’s Publisher and Placement columns come from URL parameters, not the referrer.

Run a test click in the mode you use and confirm the visit appears in ValidVisit with the site filled in; test this setup again whenever you change modes.

FAQ

Frequently asked questions

Where does the ValidVisit script go with Keitaro?+
On the lander Keitaro’s flow sends visitors to, before </body>. Local landers load from your tracker domain, so add it to your ValidVisit site’s allowed domains; for external landing pages, add the page’s own domain.
Which Keitaro token is the click ID?+
{subid}, passed as clickid={subid}. The _subid Keitaro appends to external landing pages isn’t read as ValidVisit’s click ID.
Can ValidVisit show Keitaro’s bot flag?+
Pass {is_bot} on the lander URL under a name of your own, such as kt_bot. ValidVisit keeps it with the visit, so you can compare Keitaro’s flag with ValidVisit’s verdict for the same traffic.
Will ValidVisit change my Keitaro flows?+
No. Flows, filters and blocks stay yours, and it never touches your ad accounts or sends anything into Keitaro.
Related reading
Invalid traffic by channel
deal-alerts.example71% invalid
zone 447123% invalid
premium-news.example2% invalid

Judge your own traffic the same way.

One script, every visit judged Valid or Invalid and attributed to the source that sent it.

Just your email · no card · unsubscribe anytime · privacy policy

Join the waitlist with just your email · 7-day trial at launch

One script · no cookies · no device IDs · raw IP never stored