Tracking on Yandex Direct runs on curly-brace URL tags that Yandex fills in at click time, spanning everything from {campaign_id} and {ad_id} down to the placement that actually served the impression. Appending these macros to your landing URL lets ValidVisit attribute every click to its exact YAN site and score it 0-100 for traffic quality, so search and network clicks are never lumped together.
On Yandex Direct, attribution starts with the required identifiers {campaign_id}, {ad_id} and the auto-tagged {yclid} (the Yandex Click ID Yandex stamps on every paid click), but the token that matters for sub-source visibility is {source} — it reports the actual YAN site or app domain that served your ad. Yandex uses the same lowercase-with-curly-braces format across all of its tags, so {source} drops the serving placement straight into your URL with no extra step: these are plain URL parameters, not an extra hop. Add {gbid}, {creative_id}, {keyword} and {position} alongside them and each click arrives carrying its full lineage from campaign down to the specific placement.
Per-sub-source granularity is what turns a quality score into an action you can take. Once each click is tied to its {source} domain, ValidVisit scores the traffic after it arrives and flags the YAN sites sending invalid traffic or bots — then you add that domain to your campaign's Disabled sites and apps list yourself. ValidVisit reports and scores only; it never blocks a click or auto-excludes anything, and the exclusion is always a manual change you make in Yandex Direct. Note that this lever exists for the Yandex Advertising Network — core search has no per-placement exclusion — so the blame and the fix sit with the underperforming placement, not with Yandex.
| Token | Yandex Direct macro | ValidVisit param | Example |
|---|---|---|---|
| Campaign ID *campaign | {campaign_id} | vv_campaign_id | 58392011 |
| Campaign Namecampaign | {campaign_name} | vv_campaign_name | summer_sale_search |
| Ad Group IDadset | {gbid} | vv_adset_id | 4910233 |
| Ad ID *ad | {ad_id} | vv_ad_id | 1029384756 |
| Creative IDcreative | {creative_id} | vv_creative_id | 77123 |
| Keywordkeyword | {keyword} | vv_keyword | buy running shoes |
| Placement / Sourcepublisher | {source} | vv_publisher_id | example-site.ru |
| Positionplacement | {position} | vv_placement_id | 1 |
| Yandex Click ID *click | {yclid} | vv_click_id | 1234567890123456789 |
{campaign_id}vv_campaign_id{campaign_name}vv_campaign_name{gbid}vv_adset_id{ad_id}vv_ad_id{creative_id}vv_creative_id{keyword}vv_keyword{source}vv_publisher_id{position}vv_placement_id{yclid}vv_click_id* required for Yandex Direct attribution.
https://yoursite.com/landing?utm_source=yandex-direct&utm_medium=search&vv_campaign_id={campaign_id}&vv_campaign_name={campaign_name}&vv_adset_id={gbid}&vv_ad_id={ad_id}&vv_creative_id={creative_id}&vv_keyword={keyword}&vv_publisher_id={source}&vv_placement_id={position}&vv_click_id={yclid}ValidVisit flags the bad {source} domain on the Yandex Advertising Network; add it to your campaign's Disabled sites and apps list. (Core search has no per-publisher lever.)
{source} is the one to watch — it carries the YAN site or app domain that served your ad, which is the sub-source ValidVisit scores. The required {campaign_id}, {ad_id} and {yclid} tags pin down the campaign, ad and individual click, while {source} tells you where the network actually showed it.
No. They are standard URL parameters — Yandex substitutes the real values into your landing URL at click time, so there is no funnel hop or intermediate hop. The click goes straight to your page with {source}, {yclid} and the rest already filled in.
ValidVisit reports the offending {source} domain; you exclude it manually under your campaign → Disabled sites and apps in Yandex Direct. That lever applies to YAN placements only — core search has no per-publisher exclusion.
See which Yandex Direct publishers and placements send real, converting traffic vs. bots.
Free trial at launch · lock in early-access pricing
One script · raw IP never stored · GDPR legitimate-interest basis