Copy link to clipboard
Copied
My client would like to add tracking to all their hyperlinks across 7 files, between 800-2200 SKUs each. This is not a batch find and replace situation, UTM was never used up until this new request, so I don't think IDML option will work.
Is there a way to batch add the UTM tracking to all hyperlinks?
Assuming the UTM needs to be appended to the end of all existing Hyperlink URL Destinations in the document:
var hlds = app.activeDocument.hyperlinkURLDestinations;
var utm = "?utm=blahblah";
for (var i = 0; i < hlds.length; i++) {
hlds[i].destinationURL += utm;
}
Copy link to clipboard
Copied
Assuming the UTM needs to be appended to the end of all existing Hyperlink URL Destinations in the document:
var hlds = app.activeDocument.hyperlinkURLDestinations;
var utm = "?utm=blahblah";
for (var i = 0; i < hlds.length; i++) {
hlds[i].destinationURL += utm;
}
Copy link to clipboard
Copied
Wow - Brian - brillant. Haven't worked with scripts very much. What/where exactly am I using this beautiful set of instructions?
Copy link to clipboard
Copied
The above code is a jsx script. This explains how to install and use it. You'll need to run it on an open document (won't do all docs at once--that costs extra 😉 )
https://creativepro.com/how-to-install-a-script-in-indesign-that-you-found-in-a-forum-or-blog-post/
Copy link to clipboard
Copied
Many thanks kind sir!
Copy link to clipboard
Copied
Just had to fix a spelling mistake to make this script work. Thank you so very much!
Would this script also work to find and replace if they change the UTM info in the future?
Copy link to clipboard
Copied
Sure, just change this line:
hlds[i].destinationURL += utm;
To this:
hlds[i].destinationURL = hlds[i].destinationURL.replace("?=oldutm", "?=newutm");
Keep the double quotes
Copy link to clipboard
Copied
Once Again - thank you very much!
Copy link to clipboard
Copied
Thanks brian for making this.
I have updated the code a bit so the if your url has a search queery the code will change your ? to an &.
var utm = "utm=blahblah";
var hlds = app.activeDocument.hyperlinkURLDestinations;
var utmsearch = "&" + utm;
var utmdefault = "?" + utm;
for (var i = 0; i < hlds.length; i++) {
var result = hlds.item(i).destinationURL.includes("?");
if (result) {
hlds.item(i).destinationURL += utmsearch;
} else {
hlds.item(i).destinationURL += utmdefault;
}
}
Copy link to clipboard
Copied
Im trying to run a similar script and am getting an error -wondering if anyone can help??
The code adds UTM tracking but also uses an if/then to check if there are more than one & in the code.
When I run this in InDesign I get an error I have attached as a screenshot.
Here is my code and error message - I believe the error is on the line shown in red?
var utm = "utm_source=publications&utm_medium=sale-finder&utm_campaign=12-days-of-xmas";
var hlds = app.activeDocument.hyperlinkURLDestinations;
var utmsearch = "&" + utm;
var utmdefault = "?" + utm;
for (var i = 0; i < hlds.length; i++) {
var result = hlds.item(i).destinationURL.includes("?");
if (result) {
hlds.item(i).destinationURL += utmsearch;
} else {
hlds.item(i).destinationURL += utmdefault;
}
}
Copy link to clipboard
Copied
The person who responded to my code wrote it in the new UXP scripting language (hence the idjs). Extendscript doesn't include ".include" as a string method. Try this instead.
var utm = "utm_source=publications&utm_medium=sale-finder&utm_campaign=12-days-of-xmas";
var hlds = app.activeDocument.hyperlinkURLDestinations;
var utmsearch = "&" + utm;
var utmdefault = "?" + utm;
for (var i = 0; i < hlds.length; i++) {
var result = hlds.item(i).destinationURL.indexOf("?") >= 0;
if (result) {
hlds.item(i).destinationURL += utmsearch;
} else {
hlds.item(i).destinationURL += utmdefault;
}
}
Copy link to clipboard
Copied
Wow I think that works.
Thanks sooooooooooooooo much Brian
Copy link to clipboard
Copied
Thanks for fixing my error