{"id":13141,"date":"2026-09-23T07:35:00","date_gmt":"2026-09-23T05:35:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13141"},"modified":"2026-09-09T13:21:43","modified_gmt":"2026-09-09T11:21:43","slug":"tutorial-double-encoded-utm-parameters-and-where-to-fix-them","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/","title":{"rendered":"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them"},"content":{"rendered":"<p>A campaign called <em>Sommer Aktion<\/em> turns up in the report as <code>Sommer%20Aktion<\/code>. Nothing is broken &#8211; the traffic arrived, the sessions are counted, the conversions are attributed. The name is simply wrong, and every filter, every comparison and every export inherits it.<\/p>\n<p>The cause is always the same: the value was encoded twice. What differs is where the second pass happened, and the report itself says how many passes there were.<\/p>\n<figure class=\"lw-diagram\">\n<img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/utm-doppelt-kodiert-en.png\" width=\"1120\" height=\"580\" decoding=\"async\" loading=\"lazy\"\n     alt=\"One campaign name through three stages of encoding, with the value in the URL and the value in the report shown side by side for each\"><figcaption>Each additional pass turns the percent sign of the previous one into %25. Counting them in the report gives the number of encodings.<\/figcaption><\/figure>\n<h2>What Percent-Encoding Does, and What Happens Twice<\/h2>\n<p>A URL may only contain a limited set of characters. Everything else is written as a percent sign followed by the hexadecimal value of its bytes &#8211; a space becomes <code>%20<\/code>, an ampersand <code>%26<\/code>, a German u-umlaut becomes <code>%C3%BC<\/code> because it is two bytes in UTF-8.<\/p>\n<p>The percent sign itself is one of the characters that has to be encoded, and that is the whole mechanism behind the problem. Encoding an already-encoded string converts each <code>%<\/code> into <code>%25<\/code>.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>Sommer Aktion          the value as written\nSommer%20Aktion        encoded once   - correct in a URL\nSommer%2520Aktion      encoded twice  - the %20 was encoded again\nSommer%252520Aktion    encoded three times<\/code><\/pre>\n<p>Reading it in the other direction is just as mechanical. A decoder turns <code>%2520<\/code> back into <code>%20<\/code>, which is a literal percent-two-zero rather than a space &#8211; so the value arrives as text with a percent sign in it, and that is what the report displays.<\/p>\n<h2>The Three Places a Second Pass Comes From<\/h2>\n<p>A URL is rarely built in one step, and each additional step is a candidate.<\/p>\n<p>The first is the link builder itself. A tool that takes an already-assembled URL and encodes the whole thing produces exactly this. The tell is that the ampersands between the parameters are also affected: a URL containing <code>%26utm_source%3D<\/code> was encoded as a whole rather than per component, and it does not even work as a link any more.<\/p>\n<p>The second is a click tracker. An email tool or an ad platform that wraps the destination as a parameter of its own address has to encode it once &#8211; correctly. If the destination was already encoded, the encoding of the wrapper is the second pass, and the result reaches the site intact but with doubled values.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>https:\/\/klick.beispiel\/r?u=https%3A%2F%2Fshop.example%2F%3Futm_campaign%3DSommer%2520Aktion\n                            \u2514\u2500\u2500 correct encoding of the destination \u2500\u2500\u2518  \u2514 already encoded \u2518<\/code><\/pre>\n<p>The third is a content management system. A field that stores a URL and escapes it on save, then escapes it again when rendering, produces the same result &#8211; and it is the one case where nothing in the marketing tooling is at fault, which is why it takes the longest to find.<\/p>\n<h2>Telling the Cases Apart in the Report<\/h2>\n<p>The number of passes is readable from the value, and it points at a different culprit each time.<\/p>\n<table style=\"width:100%;border-collapse:collapse;table-layout:auto;\">\n<thead>\n<tr>\n<th style=\"white-space:nowrap;vertical-align:top;\">In the report<\/th>\n<th style=\"white-space:nowrap;vertical-align:top;\">Passes<\/th>\n<th style=\"vertical-align:top;\">Where to look<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">Sommer Aktion<\/td>\n<td>1<\/td>\n<td>Correct &#8211; nothing to do<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">Sommer%20Aktion<\/td>\n<td>2<\/td>\n<td>Link builder or click tracker<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">Sommer%2520Aktion<\/td>\n<td>3<\/td>\n<td>Two wrappers in a chain<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">Sommer+Aktion<\/td>\n<td>1<\/td>\n<td>A different convention, see below<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">Sommer%C3%A4Aktion<\/td>\n<td>2<\/td>\n<td>Same problem, non-ASCII character<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The quickest way to see all of them at once is to sort the campaign dimension and look for a percent sign. A single filter on <code>%<\/code> across campaign, source, medium, term and content finds every affected value in one pass, and the count next to it says how much traffic is landing in the wrong bucket.<\/p>\n<p>The last row is worth a note. An umlaut encoded once is <code>%C3%A4<\/code>, and that is correct &#8211; the report should show the letter. Seeing the escape sequence in the report means it was encoded twice, exactly like the space.<\/p>\n<h2>Encoding Components, Not URLs<\/h2>\n<p>The rule that prevents all of this is one sentence: encode each value on its own, then join them. Never encode a URL that already has parameters in it.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>const ziel   = \"https:\/\/shop.example\/sommer\";\nconst felder = {\n  utm_source:   \"newsletter\",\n  utm_medium:   \"email\",\n  utm_campaign: \"Sommer Aktion\",\n  utm_content:  \"kopfbild & titel\"\n};\n\nconst url = ziel + \"?\" + Object.entries(felder)\n  .map(([k, v]) => encodeURIComponent(k) + \"=\" + encodeURIComponent(v))\n  .join(\"&\");\n\n\/\/ https:\/\/shop.example\/sommer?utm_source=newsletter&utm_medium=email\n\/\/   &utm_campaign=Sommer%20Aktion&utm_content=kopfbild%20%26%20titel<\/code><\/pre>\n<p>The distinction between the two available functions matters here. <code>encodeURIComponent<\/code> encodes everything that is not unreserved, including <code>&amp;<\/code>, <code>=<\/code> and <code>?<\/code>, and it belongs on individual values. <code>encodeURI<\/code> leaves exactly those characters alone because they have a structural meaning, and it belongs on a whole address that has not been encoded yet. Using the second one on a value is how an ampersand inside a campaign name splits it into two parameters.<\/p>\n<p>A simple habit closes the remaining gap: build the final URL once, and paste that string everywhere. A URL that is assembled again in a second tool is a URL that gets encoded again.<\/p>\n<h2>The Space That Is Sometimes a Plus<\/h2>\n<p>Two conventions exist for a space in a query string, and both are in use.<\/p>\n<p>Percent-encoding writes <code>%20<\/code>. Form encoding, the format a browser uses when submitting a form over GET, writes <code>+<\/code>. Both are common in URLs, and the difference is that a decoder has to be told which one it is looking at: a generic URL decoder leaves the plus as a plus, a form decoder turns it into a space.<\/p>\n<p>The practical consequence is that a campaign name containing a plus sign cannot be distinguished from one containing a space, and which of the two a given tool reports is a property of that tool. Two systems can therefore disagree about the same campaign, and neither is wrong.<\/p>\n<p>The way out is to avoid the ambiguity rather than resolve it. Campaign values without spaces &#8211; <code>sommer-aktion<\/code> rather than <code>Sommer Aktion<\/code> &#8211; are unaffected by the whole question, and they also survive being lowercased, which some platforms do without asking. A naming convention that uses hyphens and lower case removes an entire class of report noise for the cost of looking slightly less pretty in a spreadsheet.<\/p>\n<h2>Repairing What Is Already Recorded<\/h2>\n<p>Fixing the link stops new damage. The recorded sessions keep their values, and there are three ways to deal with them, in increasing order of permanence.<\/p>\n<p>In the report, two values that differ only in their encoding can be brought together by hand &#8211; a comparison, a segment, or a grouping in a spreadsheet. This is the honest option for a campaign that has ended: nothing is changed, the difference is simply accounted for.<\/p>\n<p>For a campaign that is still running, a rule at collection time is better. GA4 can rewrite an incoming parameter before it is stored, and the same is possible one step earlier in a tag &#8211; decode the value once, then write it back.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>function () {\n  var wert = {{URL - utm_campaign}};\n  if (!wert) { return undefined; }\n  \/\/ einmal zusaetzlich dekodieren, wenn ein %25 uebrig ist\n  while (\/%25\/.test(wert)) {\n    try { wert = decodeURIComponent(wert); } catch (e) { break; }\n  }\n  return wert;\n}<\/code><\/pre>\n<p>The <code>try<\/code> around the decode is not decoration. A value containing a lone percent sign that is not a valid escape sequence makes <code>decodeURIComponent<\/code> throw, and without the guard the variable returns nothing at all &#8211; which turns a cosmetic problem into a missing campaign.<\/p>\n<p>And in BigQuery, the historical rows can be corrected in the query rather than in the data, which keeps the raw export intact and is reversible.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>SELECT\n  REPLACE(REPLACE(kampagne, '%2520', ' '), '%20', ' ') AS kampagne_sauber,\n  COUNT(*) AS sitzungen\nFROM `projekt.dataset.sitzungen`\nGROUP BY kampagne_sauber\nORDER BY sitzungen DESC;<\/code><\/pre>\n<p>Which of the three is right depends on one question: whether the numbers are going into a report somebody will act on, or into an archive. For the first, correct at collection. For the second, correcting in the query is enough &#8211; and it leaves the evidence of what actually arrived.<\/p>\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc3986.html\" target=\"_blank\" rel=\"noopener noreferrer\">RFC 3986: URI Generic Syntax<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A campaign that reads Sommer%20Aktion in the report was encoded once too often, and the report says exactly how many times. Three places produce that second pass, and only one of them is worth repairing downstream.<\/p>\n","protected":false},"author":1,"featured_media":13252,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[127],"tags":[91383,91386,91516,91219],"class_list":["post-13141","post","type-post","status-publish","format-standard","hentry","category-tutorials-en-digital-marketing","tag-attribution","tag-marketing-cyfrowy-pl","tag-tracking","tag-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Double-Encoded UTM Parameters and Where to Fix Them - Lukas Wojcik - Blog<\/title>\n<meta name=\"description\" content=\"Reading percent-encoding, telling one pass from two in the report, encoding components rather than URLs, and repairing what is already recorded.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Reading percent-encoding, telling one pass from two in the report, encoding components rather than URLs, and repairing what is already recorded.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-23T05:35:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13141-tutorial-double-encoded-utm-parameters-a.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them\",\"datePublished\":\"2026-09-23T05:35:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/\"},\"wordCount\":1151,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13141-tutorial-double-encoded-utm-parameters-a.png\",\"keywords\":[\"Attribution\",\"Digital Marketing\",\"Tracking\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/\",\"name\":\"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13141-tutorial-double-encoded-utm-parameters-a.png\",\"datePublished\":\"2026-09-23T05:35:00+00:00\",\"description\":\"Reading percent-encoding, telling one pass from two in the report, encoding components rather than URLs, and repairing what is already recorded.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13141-tutorial-double-encoded-utm-parameters-a.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13141-tutorial-double-encoded-utm-parameters-a.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/tutorials-en-digital-marketing\\\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them - Lukas Wojcik - Blog","description":"Reading percent-encoding, telling one pass from two in the report, encoding components rather than URLs, and repairing what is already recorded.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them - Lukas Wojcik - Blog","og_description":"Reading percent-encoding, telling one pass from two in the report, encoding components rather than URLs, and repairing what is already recorded.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-23T05:35:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13141-tutorial-double-encoded-utm-parameters-a.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them","datePublished":"2026-09-23T05:35:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/"},"wordCount":1151,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13141-tutorial-double-encoded-utm-parameters-a.png","keywords":["Attribution","Digital Marketing","Tracking","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/","name":"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13141-tutorial-double-encoded-utm-parameters-a.png","datePublished":"2026-09-23T05:35:00+00:00","description":"Reading percent-encoding, telling one pass from two in the report, encoding components rather than URLs, and repairing what is already recorded.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13141-tutorial-double-encoded-utm-parameters-a.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13141-tutorial-double-encoded-utm-parameters-a.png","width":1200,"height":630,"caption":"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/tutorials-en-digital-marketing\/tutorial-double-encoded-utm-parameters-and-where-to-fix-them\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Double-Encoded UTM Parameters and Where to Fix Them"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13141"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13141\/revisions"}],"predecessor-version":[{"id":17257,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13141\/revisions\/17257"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/13252"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}