Table of Contents
Using Traditional Redirects
**Please note that general knowledge of coding with HTML and JavaScript is required to complete this process.
General Concept and Reporting
The offer wall / listicle will exist as one offer, while each offer within that offer wall / listicle will also exist as individual offers. In reporting, you will see the clicks that are going to the offer wall / listicle as well as the clicks to each of those individual offers.
Code Example
Both HTML and Javascript to be placed on the offer wall / listicle page:
HTML:
<a href="XXX" id="button-1"><button>Button 1</button></a><br><br>
<a href="XXX" id="button-2"><button>Button 2</button></a><br><br>
<a href="XXX" id="button-3"><button>Button 3</button></a><br><br>
JavaScript:
<script>
window.onload = function() {
var urlParams = new URLSearchParams(window.location.search);
var encodedValue = urlParams.get('encoded_value') || INTERNAL_PARTNER_ENCODED_VALUE;
document.getElementById('button-1').href="https://{INSERT_YOUR_TRACKING_DOMAIN}/"+encodedValue+"/{INSERT_OFFER_ENCODED_VALUE}/"
document.getElementById('button-2').href="https://{INSERT_YOUR_TRACKING_DOMAIN}/"+encodedValue+"/{INSERT_OFFER_ENCODED_VALUE}/"
document.getElementById('button-3').href="https://{INSERT_YOUR_TRACKING_DOMAIN}/"+encodedValue+"/{INSERT_OFFER_ENCODED_VALUE}/"
}
</script>
INTERNAL_PARTNER_ENCODED_VALUE - Use the organic Partner Encoded value if the value doesn't exist
Please note that if you are using Smart Links, then the following code from above should be changed from this...
document.getElementById('button-1').href="https://{INSERT_YOUR_TRACKING_DOMAIN}/"+encodedValue+"/{INSERT_OFFER_ENCODED_VALUE}/"
...to this (now includes /cmp after the tracking domain
document.getElementById('button-1').href="https://{INSERT_YOUR_TRACKING_DOMAIN}/cmp/"+encodedValue+"/{INSERT_OFFER_ENCODED_VALUE}/"
Steps
The buttons within the HTML need to have the appropriate IDs or class names. If you use a class name, you will need to associate document.getElementByClassName instead of document.getElementById to them to make them "selectable" within the JavaScript. In the example, see "button-1", "button-2", and "button-3" here.
We will be using JavaScript to replace the href="" value with the partner tracking link we create dynamically inside the script section.
If desired, you may add sub1 - sub5 parameters using the sample code below with sub parameters defined in the var line items.
Do not update the XXX in the HTML, that will not change.
JavaScript:
<script> window.onload = function()
{ var urlParams = new URLSearchParams(window.location.search);
var encodedValue = urlParams.get('encoded_value'); || INTERNAL_PARTNER_ENCODED_VALUE;
var sub1 = urlParams.get('sub1');
var sub2 = urlParams.get('sub2');
var sub3 = urlParams.get('sub3');
var sub4 = urlParams.get('sub4');
var sub5 = urlParams.get('sub5');
document.getElementById('button 1').href="https://{INSERT_YOUR_TRACKING_DOMAIN}/"+encodedValue+"/{INSERT_OFFER_ENCODED_VALUE}/?sub1="+sub1+"&sub2="+sub2+"&sub3="+sub3+"&sub4="+sub4+"&sub5="+sub5
document.getElementById('button-2').href="https://{INSERT_YOUR_TRACKING_DOMAIN}/"+encodedValue+"/{INSERT_OFFER_ENCODED_VALUE}/?sub1="+sub1+"&sub2="+sub2+"&sub3="+sub3+"&sub4="+sub4+"&sub5="+sub5
document.getElementById('button-3').href="https://{INSERT_YOUR_TRACKING_DOMAIN}/"+encodedValue+"/{INSERT_OFFER_ENCODED_VALUE}/?sub1="+sub1+"&sub2="+sub2+"&sub3="+sub3+"&sub4="+sub4+"&sub5="+sub5
}
</script>
INTERNAL_PARTNER_ENCODED_VALUE - Use the organic Partner Encoded value if the value doesn't exist
Set the offer's Base Destination URL of the offer wall / listicle offer with the following parameters and macros appended:
?encoded_value={affiliate_encoded_id} or &encoded_value={affiliate_encoded_id}
Please note if you are using Smart Links then the base URL should be modified to this:
?encoded_value={affiliate_smartlink_encoded_id} or &encoded_value={affiliate_smartlink_encoded_id}
Grab the Encoded Value for each of the individual offers from the Offers - Manage > Select the Offer > General card > Details and insert it where it says {INSERT_OFFER_ENCODED_VALUE} in the code snippet above.
Grab your Internal Partner Encoded Value under Partner - Manage > Select the Internal Partner > General card > Details and insert it where it says
INTERNAL_PARTNER_ENCODED_VALUE
in the code snippet above.
Additionally, you will need to replace {INSERT_YOUR_TRACKING_DOMAIN} with the tracking domain found on the same page in the conversion method section here.
To test, generate a tracking link for the offer wall / listicle offer and then click a button on the offer wall / listicle page to make sure it redirects to the correct offer. You will see a click for the offer wall / listicle offer as well as the individual offer.
Using Direct Linking
AD (Google/Facebook/Affiliate Link): User clicks (CLICK 1) on AD and lands on your PreLander / Offer Wall.
https://www.PRELANDER.com?oid=11&affid=2
PreLander / OfferWall page: From the Offer Wall, the User clicks (CLICK 2) on a link to reach the final Offer.
The below string must be added to the Offer Page URL in order for the Transaction ID to carry through from the click on the PreLander:
?_ef_transaction_id={transaction_id}
Code Example
To be placed on the offer wall / listicle page:
<script type="text/javascript" src="https://www.TRACKING_DOMAIN.com/scripts/sdk/everflow.js"></script>
<script type="text/javascript">
var siteUrl = 'OFFER_PAGE.com';
var advertiserId = '1';
window.onload = function() {
var elems = document.body.getElementsByTagName("a");
if (!EF.getAdvertiserTransactionId(advertiserId)) {
EF.click({
offer_id: EF.urlParameter('oid'),
affiliate_id: EF.urlParameter('affid'),
sub1: EF.urlParameter('sub1'),
sub2: EF.urlParameter('sub2'),
sub3: EF.urlParameter('sub3'),
sub4: EF.urlParameter('sub4'),
sub5: EF.urlParameter('sub5'),
uid: EF.urlParameter('uid'),
source_id: EF.urlParameter('source_id'),
transaction_id: EF.urlParameter('_ef_transaction_id'),
}).then(function(transaction_id) {
if (transaction_id != "") {
for (var i = 0; i < elems.length; i++) {
if (elems[i].href.includes(siteUrl)) {
var url = new URL(elems[i].href);
url.searchParams.set('_ef_transaction_id', transaction_id);
elems[i].href = url.href
}
}
}
});
} else {
for (var i = 0; i < elems.length; i++) {
if (elems[i].href.includes(siteUrl)) {
var url = new URL(elems[i].href);
url.searchParams.set('_ef_transaction_id', EF.getAdvertiserTransactionId(advertiserId));
elems[i].href = url.href
}
}
}
}
</script>You will need to replace the
TRACKING_DOMAIN
with the actual tracking domain for the offer. TheOFFER_PAGE
will need to be replaced with the actual Offer Page URL. And finally replace theadvertiserId
with the correct value.
Advertiser/Offer page:
User lands on the final Offer page with all the Transaction ID from the initial click.
https://www.OFFER_PAGE.com?_ef_transaction_id=9f3e7c3bef2d4b6ba0c2bf4bcee45310
To use this model with Direct Linking, the standard JavaSscript SDK Click Script must be placed on the Offer Page. You must use the correct
TRACKING_DOMAIN
here as well.<script type="text/javascript" src="https://www.TRACKING_DOMAIN.com/scripts/sdk/everflow.js"></script>
<script type="text/javascript">
EF.click({
offer_id: EF.urlParameter('oid'),
affiliate_id: EF.urlParameter('affid'),
sub1: EF.urlParameter('sub1'),
sub2: EF.urlParameter('sub2'),
sub3: EF.urlParameter('sub3'),
sub4: EF.urlParameter('sub4'),
sub5: EF.urlParameter('sub5'),
uid: EF.urlParameter('uid'),
source_id: EF.urlParameter('source_id'),
transaction_id: EF.urlParameter('_ef_transaction_id'),
});
</script>
When the user lands on the Offer Page, the Transaction ID will be saved in the first party cookie.
Conversions will track normally using the standard JavaScript SDK Conversion Script.