{"id":46,"date":"2026-05-16T02:55:56","date_gmt":"2026-05-16T02:55:56","guid":{"rendered":"https:\/\/www.expandurl.net\/blog\/?p=46"},"modified":"2026-05-16T02:55:56","modified_gmt":"2026-05-16T02:55:56","slug":"understanding-url-parameters-and-tracking-codes","status":"publish","type":"post","link":"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/","title":{"rendered":"Understanding URL Parameters and Tracking Codes"},"content":{"rendered":"<style>:root { --black: #0f0f0f; --ink: #1a1a1a; --mid: #444; --muted: #888; --rule: #ddd; --accent: #c0392b; --accent-light: #fdf3f2; --code-bg: #f4f4f4; --code-border: #e0e0e0; --white: #ffffff; }\n.container { max-width: 1280px; margin: 0 auto; padding: 0 28px; }\n.toc { border-left: 3px solid var(--black); padding: 8px 32px; margin: 56px 0 8px; background: #fafafa; }\n.toc h2 { font-family: 'JetBrains Mono', monospace; font-size: 11px; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); margin-bottom: 16px; border-top:none; }\n.toc ol { padding-left: 20px; }\n.toc li { margin: 6px 0; }\n.toc a { color: var(--ink); text-decoration: none; font-size: 0.92rem; font-family: 'Source Serif 4', serif; font-weight: 400; border-bottom: 1px solid transparent; transition: border-color .2s, color .2s; }\n.toc a:hover { color: var(--accent); border-bottom-color: var(--accent); }\n.article { padding: 60px 0 80px; }\nsection { margin-bottom: 64px; }\nh2 { font-family: 'Playfair Display', Georgia, serif; font-size: clamp(1.5rem, 3vw, 2rem); font-weight: 700; color: var(--black); line-height: 1.22; margin-bottom: 24px; padding-top: 12px; border-top: 2px solid var(--black); }\nh3 { font-family: 'Playfair Display', Georgia, serif; font-size: 1.25rem; font-weight: 700; font-style: italic; color: var(--ink); margin: 36px 0 14px; }\n.container p { margin-bottom: 22px; }\n.container strong { font-weight: 600; padding:0 5px;}\n.container em { font-style: italic; padding:0 5px; }\n.container a:hover { color: var(--accent); text-decoration: underline; text-decoration-color: #f1948a; text-underline-offset: 3px; }\n.container blockquote { border-left: 4px solid var(--accent); margin: 36px 0; padding: 4px 0 4px 28px; }\n.container blockquote p { font-family: 'Playfair Display', Georgia, serif; font-size: 1.25rem; font-style: italic; color: var(--ink); line-height: 1.5; margin-bottom: 0; }\ncode { font-family: 'JetBrains Mono', monospace; font-size: .84em; background: var(--code-bg); border: 1px solid var(--code-border); border-radius: 4px; padding: 2px 7px; color: #c0392b; margin:0 5px; }\npre { background: #1a1a1a; color: #f8f8f2; border-radius: 8px; padding: 24px 28px; overflow-x: auto; margin: 28px 0; font-family: 'JetBrains Mono', monospace; font-size: 13px; line-height: 1.7; }\npre code { background: none; border: none; padding: 0; color: inherit; font-size: inherit; border-radius: 0; }\n.kw { color: #ff79c6; }\n.str { color: #f1fa8c; }\n.cmt { color: #6272a4; font-style: italic; }\n.fn { color: #50fa7b; }\n.var { color: #8be9fd; }\n.num { color: #bd93f9; }\n.param-table { width: 100%; border-collapse: collapse; margin: 28px 0; font-size: 0.9rem; }\n.param-table thead tr { background: var(--black); color: var(--white); }\n.param-table th { padding: 12px 16px; text-align: left; font-family: 'JetBrains Mono', monospace; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; font-weight: 600; }\n.param-table td { padding: 12px 16px; border-bottom: 1px solid var(--rule); vertical-align: top; }\n.param-table tbody tr:hover { background: #fafafa; }\n.param-table .tag { display: inline-block; font-family: 'JetBrains Mono', monospace; font-size: 11px; background: var(--accent-light); color: var(--accent); border-radius: 4px; padding: 2px 8px; }\n.callout { border: 1px solid var(--code-border); border-left: 4px solid var(--accent); border-radius: 0 8px 8px 0; background: var(--accent-light); padding: 20px 24px; margin: 32px 0; }\n.callout .callout-title { font-family: 'JetBrains Mono', monospace; font-size: 11px; letter-spacing: .2em; text-transform: uppercase; color: var(--accent); margin-bottom: 10px; font-weight: 600; }\n.callout p { margin-bottom: 0; font-size: 0.93rem; }\n.callout-info { border-left-color: #2980b9; background: #eaf4fb; }\n.callout-info .callout-title { color: #2980b9; }\nul.checklist { list-style: none; padding: 0; margin: 20px 0; }\nul.checklist li { padding: 7px 0 7px 32px; position: relative; border-bottom: 1px solid var(--rule); font-size: 0.95rem; }\nul.checklist li:last-child { border-bottom: none; }\nul.checklist li::before { content: '\u2192'; position: absolute; left: 0; color: var(--accent); font-family: 'JetBrains Mono', monospace; font-size: 13px; background:none; top:7px;}\nhr { border: none; border-top: 1px solid var(--rule); margin: 56px 0; }\n.conclusion-box { background: var(--black); color: var(--white); padding: 44px 48px; border-radius: 8px; margin-top: 48px; }\n.conclusion-box h2 { color: var(--white); border-top-color: var(--accent); font-size: 1.5rem; }\n.conclusion-box p { color: #ccc; }\n.conclusion-box code { background: rgba(255,255,255,.12); border-color: rgba(255,255,255,.2); color: #f1fa8c; }\n@media (max-width: 600px) {\n  .conclusion-box { padding: 28px 24px; }\n  pre { font-size: 12px; padding: 18px 16px; }\n}<\/style>\n<div class=\"container\"><dir class=\"toc\"><\/p>\n<h2>Contents<\/h2>\n<ol>\n<li><a href=\"#anatomy\">Anatomy of a URL<\/a><\/li>\n<li><a href=\"#query-params\">Query Parameters Explained<\/a><\/li>\n<li><a href=\"#utm\">UTM Tracking Parameters<\/a><\/li>\n<li><a href=\"#other-trackers\">Other Common Tracking Codes<\/a><\/li>\n<li><a href=\"#reading\">Reading Parameters in Code<\/a><\/li>\n<li><a href=\"#encoding\">URL Encoding<\/a><\/li>\n<li><a href=\"#privacy\">Privacy and Security Implications<\/a><\/li>\n<li><a href=\"#best-practices\">Best Practices<\/a><\/li>\n<\/ol>\n<p><\/dir><\/div>\n<div class=\"container\">\n<div class=\"article\">\n<p>Every time you click a link in an email campaign, a social media post, or an online advertisement, something subtle happens: a string of extra text is appended to the URL. This text &#8211; called<strong>URL parameters<\/strong>or<strong>query strings<\/strong>&#8211; is the backbone of web analytics, A\/B testing, campaign attribution, and personalisation. Understanding how these parameters work is fundamental for developers, marketers, and anyone who wants to understand how the modern web really operates.<\/p>\n<p>This guide breaks down everything: what URL parameters are, the major tracking systems built on top of them, how to read and write them programmatically, and the privacy considerations every responsible practitioner should know.<\/p>\n<div id=\"anatomy\">\n<h2>1. Anatomy of a URL<\/h2>\n<p>Before diving into parameters, we need to understand where they live. A URL is composed of several distinct parts:<\/p>\n<pre><code><span class=\"cmt\"># Full URL breakdown<\/span>\r\n<span class=\"var\">scheme<\/span> :\/\/ <span class=\"var\">host<\/span> \/ <span class=\"var\">path<\/span> ? <span class=\"var\">query string<\/span> # <span class=\"var\">fragment<\/span>\r\nhttps:\/\/shop.example.com\/products?color=red&amp;size=M#reviews<\/code><\/pre>\n<table class=\"param-table\">\n<thead>\n<tr>\n<th>Component<\/th>\n<th>Example<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Scheme<\/strong><\/td>\n<td><code>https:\/\/<\/code><\/td>\n<td>Protocol used to transfer data<\/td>\n<\/tr>\n<tr>\n<td><strong>Host<\/strong><\/td>\n<td><code>shop.example.com<\/code><\/td>\n<td>Domain name or IP address of the server<\/td>\n<\/tr>\n<tr>\n<td><strong>Path<\/strong><\/td>\n<td><code>\/products<\/code><\/td>\n<td>Specific resource on the server<\/td>\n<\/tr>\n<tr>\n<td><strong>Query String<\/strong><\/td>\n<td><code>?color=red&amp;size=M<\/code><\/td>\n<td>Key-value pairs passed to the server or client<\/td>\n<\/tr>\n<tr>\n<td><strong>Fragment<\/strong><\/td>\n<td><code>#reviews<\/code><\/td>\n<td>Client-side anchor; never sent to the server<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The query string begins with a<code>?<\/code>and contains one or more<strong>key=value pairs<\/strong>separated by<code>&amp;<\/code>characters. The fragment (<code>#<\/code>) is handled entirely by the browser and is never included in HTTP requests &#8211; making it a common trick for client-side state management and tracking workarounds.<\/p>\n<div class=\"callout callout-info\">\n<div class=\"callout-title\">\ud83d\udca1 Note<\/div>\n<p>The order of query parameters generally does not matter to web servers, though some applications may rely on a specific order for caching or signature verification.<\/p>\n<\/div>\n<\/div>\n<div id=\"query-params\">\n<h2>2. Query Parameters Explained<\/h2>\n<p>Query parameters serve two broad purposes:<strong>functional<\/strong>and<strong>informational<\/strong>. Functional parameters control what the server returns &#8211; things like search terms, filter settings, page numbers, and sort orders. Informational parameters carry metadata that doesn&#8217;t change the response but is captured for analytics or personalisation.<\/p>\n<h3>Functional Parameters<\/h3>\n<p>These directly affect the page content or application behaviour:<\/p>\n<pre><code>https:\/\/store.com\/search?<span class=\"var\">q<\/span>=running+shoes&amp;<span class=\"var\">page<\/span>=2&amp;<span class=\"var\">sort<\/span>=price_asc&amp;<span class=\"var\">min_price<\/span>=50<\/code><\/pre>\n<p>Here,<code>q<\/code>drives the search query,<code>page<\/code>controls pagination,<code>sort<\/code>determines ordering, and<code>min_price<\/code>applies a filter. Remove any of these and the user experience changes meaningfully.<\/p>\n<h3>Informational \/ Tracking Parameters<\/h3>\n<p>These travel along for the ride without changing the server&#8217;s response:<\/p>\n<pre><code>https:\/\/store.com\/search?q=shoes&amp;<span class=\"var\">utm_source<\/span>=google&amp;<span class=\"var\">utm_campaign<\/span>=brand_kw<\/code><\/pre>\n<p>The server returns the same search results regardless of whether the UTM parameters are present. Their value is captured by analytics scripts running on the page.<\/p>\n<blockquote>\n<p>Query parameters are the web&#8217;s memo field &#8211; they carry context forward through every click, even when the destination doesn&#8217;t ask for it.<\/p>\n<\/blockquote>\n<\/div>\n<div id=\"utm\">\n<h2>3. UTM Tracking Parameters<\/h2>\n<p><strong>UTM<\/strong>stands for<em>Urchin Tracking Module<\/em>&#8211; named after Urchin Software, the web analytics company acquired by Google in 2005 to create Google Analytics. UTM parameters became the universal standard for campaign tracking and remain dominant today.<\/p>\n<p>There are five official UTM parameters:<\/p>\n<table class=\"param-table\">\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Required<\/th>\n<th>Description<\/th>\n<th>Example Value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>utm_source<\/code><\/td>\n<td><span class=\"tag\">Required<\/span><\/td>\n<td>Where the traffic originates<\/td>\n<td><code>google<\/code>,<code>newsletter<\/code>,<code>twitter<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>utm_medium<\/code><\/td>\n<td><span class=\"tag\">Required<\/span><\/td>\n<td>The marketing channel or medium<\/td>\n<td><code>cpc<\/code>,<code>email<\/code>,<code>social<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>utm_campaign<\/code><\/td>\n<td><span class=\"tag\">Required<\/span><\/td>\n<td>The specific campaign name<\/td>\n<td><code>summer_sale<\/code>,<code>product_launch<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>utm_content<\/code><\/td>\n<td><span class=\"tag\" style=\"background:#f0faf0;color:#27ae60\">Optional<\/span><\/td>\n<td>Differentiates ads or links within a campaign (A\/B testing)<\/td>\n<td><code>blue_button<\/code>,<code>hero_image<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>utm_term<\/code><\/td>\n<td><span class=\"tag\" style=\"background:#f0faf0;color:#27ae60\">Optional<\/span><\/td>\n<td>Paid search keywords<\/td>\n<td><code>running+shoes<\/code>,<code>best+laptop<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>A Real-World UTM Example<\/h3>\n<p>Imagine a retailer sends a promotional email for their summer sale. They might construct the following link:<\/p>\n<pre><code>https:\/\/shop.example.com\/summer-sale\r\n  ?utm_source=<span class=\"str\">mailchimp<\/span>\r\n  &amp;utm_medium=<span class=\"str\">email<\/span>\r\n  &amp;utm_campaign=<span class=\"str\">summer_2026<\/span>\r\n  &amp;utm_content=<span class=\"str\">hero_cta_button<\/span><\/code><\/pre>\n<p>When a user clicks this link, Google Analytics (or any other analytics tool) captures all four values and associates them with the user&#8217;s session. If they later convert, the sale is attributed to<em>mailchimp \/ email \/ summer_2026<\/em>.<\/p>\n<div class=\"callout\">\n<div class=\"callout-title\">\u26a0\ufe0f Common Pitfall<\/div>\n<p>UTM values are<strong>case-sensitive<\/strong>in most analytics platforms.<code>Email<\/code>,<code>email<\/code>, and<code>EMAIL<\/code>will be counted as three different sources, fragmenting your data. Establish a naming convention and enforce it across your team.<\/p>\n<\/div>\n<h3>UTM Best Practices<\/h3>\n<ul class=\"checklist\">\n<li>Always use lowercase values consistently<\/li>\n<li>Use underscores instead of spaces or hyphens for readability<\/li>\n<li>Create a shared UTM naming convention document for your team<\/li>\n<li>Use a UTM builder tool to reduce human error<\/li>\n<li>Never use UTM parameters on internal links &#8211; it resets the session source<\/li>\n<li>Document all campaigns in a centralised spreadsheet with their UTM values<\/li>\n<\/ul>\n<\/div>\n<div id=\"other-trackers\">\n<h2>4. Other Common Tracking Codes<\/h2>\n<p>UTM parameters are not the only tracking system in use. Different platforms have introduced their own proprietary parameters, and many coexist on a single URL.<\/p>\n<h3>Facebook \/ Meta:<code>fbclid<\/code><\/h3>\n<p>When a user clicks a link shared on Facebook, Meta automatically appends<code>fbclid<\/code>(Facebook Click ID) &#8211; a long, unique token that Meta uses to match click events to conversions for its ad attribution system. It looks like this:<\/p>\n<pre><code>https:\/\/example.com\/page?<span class=\"var\">fbclid<\/span>=IwAR3xQkR7...<\/code><\/pre>\n<p>You have no control over this parameter &#8211; Meta inserts it automatically. It should be filtered out of your analytics to avoid polluting your data.<\/p>\n<h3>Google Ads:<code>gclid<\/code><\/h3>\n<p>Google&#8217;s equivalent is<code>gclid<\/code>(Google Click ID). It enables<strong>auto-tagging<\/strong>in Google Ads, allowing conversion data from your website to flow back into the Ads platform without requiring manual UTM setup.<\/p>\n<pre><code>https:\/\/example.com\/page?<span class=\"var\">gclid<\/span>=CjwKCAjw5...<\/code><\/pre>\n<h3>Microsoft Advertising:<code>msclkid<\/code><\/h3>\n<p>Microsoft&#8217;s Bing Ads uses<code>msclkid<\/code>in an identical fashion to<code>gclid<\/code>for attribution within its advertising ecosystem.<\/p>\n<h3>Referral &amp; Affiliate Codes:<code>ref<\/code>,<code>aff<\/code><\/h3>\n<p>Many platforms use custom parameters like<code>ref<\/code>,<code>referral<\/code>, or<code>aff<\/code>to track affiliate links and referral programs. These are non-standardised, but common:<\/p>\n<pre><code>https:\/\/service.com\/signup?<span class=\"var\">ref<\/span>=johndoe&amp;<span class=\"var\">promo<\/span>=SAVE20<\/code><\/pre>\n<h3>A\/B Testing &amp; Feature Flags<\/h3>\n<p>Parameters are also used to force specific variants in split tests or enable feature flags in development:<\/p>\n<pre><code>https:\/\/app.example.com?<span class=\"var\">variant<\/span>=B&amp;<span class=\"var\">feature_flag<\/span>=new_checkout<\/code><\/pre>\n<table class=\"param-table\">\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Platform<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>utm_*<\/code><\/td>\n<td>Universal (Google Analytics)<\/td>\n<td>Campaign attribution<\/td>\n<\/tr>\n<tr>\n<td><code>gclid<\/code><\/td>\n<td>Google Ads<\/td>\n<td>Ad click attribution<\/td>\n<\/tr>\n<tr>\n<td><code>fbclid<\/code><\/td>\n<td>Meta \/ Facebook<\/td>\n<td>Ad click attribution<\/td>\n<\/tr>\n<tr>\n<td><code>msclkid<\/code><\/td>\n<td>Microsoft Advertising<\/td>\n<td>Ad click attribution<\/td>\n<\/tr>\n<tr>\n<td><code>ttclid<\/code><\/td>\n<td>TikTok Ads<\/td>\n<td>Ad click attribution<\/td>\n<\/tr>\n<tr>\n<td><code>ref<\/code>\/<code>aff<\/code><\/td>\n<td>Custom<\/td>\n<td>Referral \/ affiliate tracking<\/td>\n<\/tr>\n<tr>\n<td><code>_hsenc<\/code>,<code>_hsmi<\/code><\/td>\n<td>HubSpot<\/td>\n<td>Email tracking<\/td>\n<\/tr>\n<tr>\n<td><code>mc_eid<\/code>,<code>mc_cid<\/code><\/td>\n<td>Mailchimp<\/td>\n<td>Email campaign tracking<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div id=\"reading\">\n<h2>5. Reading Parameters in Code<\/h2>\n<p>As a developer, you&#8217;ll regularly need to read URL parameters on both the client and server side. Here&#8217;s how to do it effectively.<\/p>\n<h3>In JavaScript (Browser)<\/h3>\n<p>The modern<code>URLSearchParams<\/code>API makes parsing query strings clean and straightforward:<\/p>\n<pre><code><span class=\"cmt\">\/\/ URL: https:\/\/example.com\/page?utm_source=email&amp;discount=SAVE20<\/span>\r\n<span class=\"kw\">const<\/span> <span class=\"var\">params<\/span> = <span class=\"kw\">new<\/span> <span class=\"fn\">URLSearchParams<\/span>(window.location.search);\r\n<span class=\"cmt\">\/\/ Get a single value<\/span>\r\n<span class=\"var\">params<\/span>.<span class=\"fn\">get<\/span>(<span class=\"str\">'utm_source'<\/span>);    <span class=\"cmt\">\/\/ \u2192 \"email\"<\/span>\r\n<span class=\"var\">params<\/span>.<span class=\"fn\">get<\/span>(<span class=\"str\">'discount'<\/span>);      <span class=\"cmt\">\/\/ \u2192 \"SAVE20\"<\/span>\r\n<span class=\"var\">params<\/span>.<span class=\"fn\">get<\/span>(<span class=\"str\">'missing_key'<\/span>);  <span class=\"cmt\">\/\/ \u2192 null<\/span>\r\n<span class=\"cmt\">\/\/ Check if a parameter exists<\/span>\r\n<span class=\"var\">params<\/span>.<span class=\"fn\">has<\/span>(<span class=\"str\">'discount'<\/span>);  <span class=\"cmt\">\/\/ \u2192 true<\/span>\r\n<span class=\"cmt\">\/\/ Iterate all parameters<\/span>\r\n<span class=\"var\">params<\/span>.<span class=\"fn\">forEach<\/span>((<span class=\"var\">value<\/span>, <span class=\"var\">key<\/span>) =&gt; {\r\n  console.<span class=\"fn\">log<\/span>(<span class=\"str\">`<\/span><span class=\"var\">${key}<\/span><span class=\"str\"> = <\/span><span class=\"var\">${value}<\/span><span class=\"str\">`<\/span>);\r\n});\r\n<span class=\"cmt\">\/\/ Convert to a plain object<\/span>\r\n<span class=\"kw\">const<\/span> <span class=\"var\">obj<\/span> = Object.<span class=\"fn\">fromEntries<\/span>(<span class=\"var\">params<\/span>);\r\n<span class=\"cmt\">\/\/ \u2192 { utm_source: \"email\", discount: \"SAVE20\" }<\/span><\/code><\/pre>\n<h3>Constructing URLs with Parameters<\/h3>\n<pre><code><span class=\"kw\">const<\/span> <span class=\"var\">url<\/span> = <span class=\"kw\">new<\/span> <span class=\"fn\">URL<\/span>(<span class=\"str\">'https:\/\/example.com\/page'<\/span>);\r\n<span class=\"var\">url<\/span>.searchParams.<span class=\"fn\">set<\/span>(<span class=\"str\">'utm_source'<\/span>, <span class=\"str\">'newsletter'<\/span>);\r\n<span class=\"var\">url<\/span>.searchParams.<span class=\"fn\">set<\/span>(<span class=\"str\">'utm_campaign'<\/span>, <span class=\"str\">'launch_2026'<\/span>);\r\nconsole.<span class=\"fn\">log<\/span>(<span class=\"var\">url<\/span>.href);\r\n<span class=\"cmt\">\/\/ \u2192 \"https:\/\/example.com\/page?utm_source=newsletter&utm_campaign=launch_2026\"<\/span><\/code><\/pre>\n<h3>In Python (Server-Side)<\/h3>\n<pre><code><span class=\"kw\">from<\/span> urllib.parse <span class=\"kw\">import<\/span> urlparse, parse_qs, urlencode, urljoin\r\n<span class=\"var\">raw_url<\/span> = <span class=\"str\">\"https:\/\/example.com\/page?utm_source=email&amp;discount=SAVE20&amp;tags=a&amp;tags=b\"<\/span>\r\n<span class=\"var\">parsed<\/span>  = <span class=\"fn\">urlparse<\/span>(<span class=\"var\">raw_url<\/span>)\r\n<span class=\"var\">params<\/span>  = <span class=\"fn\">parse_qs<\/span>(<span class=\"var\">parsed<\/span>.query)\r\n<span class=\"cmt\"># parse_qs always returns lists (handles repeated keys)<\/span>\r\n<span class=\"var\">params<\/span>[<span class=\"str\">'utm_source'<\/span>]  <span class=\"cmt\"># \u2192 ['email']<\/span>\r\n<span class=\"var\">params<\/span>[<span class=\"str\">'tags'<\/span>]        <span class=\"cmt\"># \u2192 ['a', 'b']<\/span>\r\n<span class=\"cmt\"># Get first value safely<\/span>\r\n<span class=\"var\">source<\/span> = <span class=\"var\">params<\/span>.<span class=\"fn\">get<\/span>(<span class=\"str\">'utm_source'<\/span>, [<span class=\"kw\">None<\/span>])[<span class=\"num\">0<\/span>]<\/code><\/pre>\n<h3>In Node.js<\/h3>\n<pre><code><span class=\"kw\">const<\/span> { URL } = require(<span class=\"str\">'url'<\/span>);\r\n<span class=\"kw\">const<\/span> <span class=\"var\">url<\/span> = <span class=\"kw\">new<\/span> <span class=\"fn\">URL<\/span>(<span class=\"str\">'https:\/\/example.com\/page?utm_source=email&amp;discount=SAVE20'<\/span>);\r\n<span class=\"var\">url<\/span>.searchParams.<span class=\"fn\">get<\/span>(<span class=\"str\">'utm_source'<\/span>);  <span class=\"cmt\">\/\/ \u2192 \"email\"<\/span>\r\n<span class=\"var\">url<\/span>.searchParams.<span class=\"fn\">get<\/span>(<span class=\"str\">'discount'<\/span>);   <span class=\"cmt\">\/\/ \u2192 \"SAVE20\"<\/span><\/code><\/pre>\n<\/div>\n<div id=\"encoding\">\n<h2>6. URL Encoding<\/h2>\n<p>URLs can only contain a limited set of characters. Special characters &#8211; spaces, ampersands, equals signs, non-ASCII characters &#8211; must be<strong>percent-encoded<\/strong>(also called URL encoding). Each unsafe character is replaced by a<code>%<\/code>followed by its two-digit hexadecimal ASCII code.<\/p>\n<table class=\"param-table\">\n<thead>\n<tr>\n<th>Character<\/th>\n<th>Encoded<\/th>\n<th>Reason<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Space<\/td>\n<td><code>%20<\/code>or<code>+<\/code><\/td>\n<td>Reserved &#8211; separates tokens in some contexts<\/td>\n<\/tr>\n<tr>\n<td><code>&amp;<\/code><\/td>\n<td><code>%26<\/code><\/td>\n<td>Reserved &#8211; separates parameters<\/td>\n<\/tr>\n<tr>\n<td><code>=<\/code><\/td>\n<td><code>%3D<\/code><\/td>\n<td>Reserved &#8211; separates key from value<\/td>\n<\/tr>\n<tr>\n<td><code>+<\/code><\/td>\n<td><code>%2B<\/code><\/td>\n<td>Means &#8220;space&#8221; in query strings<\/td>\n<\/tr>\n<tr>\n<td><code>#<\/code><\/td>\n<td><code>%23<\/code><\/td>\n<td>Reserved &#8211; begins the fragment<\/td>\n<\/tr>\n<tr>\n<td><code>\/<\/code><\/td>\n<td><code>%2F<\/code><\/td>\n<td>Reserved &#8211; path separator<\/td>\n<\/tr>\n<tr>\n<td><code>\u00e9<\/code><\/td>\n<td><code>%C3%A9<\/code><\/td>\n<td>Non-ASCII &#8211; UTF-8 encoded<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code><span class=\"cmt\">\/\/ JavaScript encoding functions<\/span>\r\n<span class=\"fn\">encodeURIComponent<\/span>(<span class=\"str\">'hello world &amp; more'<\/span>);\r\n<span class=\"cmt\">\/\/ \u2192 \"hello%20world%20%26%20more\"<\/span>\r\n<span class=\"fn\">decodeURIComponent<\/span>(<span class=\"str\">'hello%20world%20%26%20more'<\/span>);\r\n<span class=\"cmt\">\/\/ \u2192 \"hello world &amp; more\"<\/span>\r\n<span class=\"cmt\">\/\/ URLSearchParams handles encoding automatically<\/span>\r\n<span class=\"kw\">const<\/span> <span class=\"var\">p<\/span> = <span class=\"kw\">new<\/span> <span class=\"fn\">URLSearchParams<\/span>();\r\n<span class=\"var\">p<\/span>.<span class=\"fn\">set<\/span>(<span class=\"str\">'q'<\/span>, <span class=\"str\">'caf\u00e9 &amp; croissant'<\/span>);\r\n<span class=\"var\">p<\/span>.toString();  <span class=\"cmt\">\/\/ \u2192 \"q=caf%C3%A9+%26+croissant\"<\/span><\/code><\/pre>\n<div class=\"callout callout-info\">\n<div class=\"callout-title\">\ud83d\udca1 Tip<\/div>\n<p>Always use<code>encodeURIComponent()<\/code>for individual values, not<code>encodeURI()<\/code>. The latter doesn&#8217;t encode<code>&amp;<\/code>and<code>=<\/code>, which will break your query string structure.<\/p>\n<\/div>\n<\/div>\n<div id=\"privacy\">\n<h2>7. Privacy and Security Implications<\/h2>\n<p>URL parameters are a powerful tool, but they carry real privacy and security concerns that every developer and marketer must understand.<\/p>\n<h3>URLs Are Logged Everywhere<\/h3>\n<p>The full URL &#8211; including all query parameters &#8211; is written into server access logs, browser history, proxy logs, and referrer headers. When a user navigates from your page to another site, their browser sends the full URL (including tracking parameters) in the<code>Referer<\/code>header. This means<strong>sensitive data must never appear in URL parameters<\/strong>.<\/p>\n<div class=\"callout\">\n<div class=\"callout-title\">\u26a0\ufe0f Never Put in URL Parameters<\/div>\n<p>Passwords, session tokens, API keys, credit card numbers, personal health information, or any other sensitive data. Use POST requests with encrypted body payloads instead.<\/p>\n<\/div>\n<h3>Referrer Leakage<\/h3>\n<p>If your page URL contains UTM parameters or other tracking codes and a user follows an external link, the destination website can see those parameters in the<code>Referer<\/code>header. To prevent this, use the<code>Referrer-Policy<\/code>HTTP header:<\/p>\n<pre><code><span class=\"cmt\"># Recommended policy - strips query string from cross-origin referrers<\/span>\r\nReferrer-Policy: strict-origin-when-cross-origin<\/code><\/pre>\n<h3>URL Parameter Stripping by Browsers<\/h3>\n<p>Privacy-focused browsers and extensions now strip known tracking parameters. Safari&#8217;s Intelligent Tracking Prevention (ITP) strips<code>fbclid<\/code>and other known trackers. Firefox and Brave have similar features. This is why relying solely on URL-based tracking is increasingly unreliable &#8211; server-side tracking and first-party data are becoming essential complements.<\/p>\n<h3>Open Redirect Vulnerabilities<\/h3>\n<p>A common security vulnerability occurs when an application uses a URL parameter as a redirect destination without validating it:<\/p>\n<pre><code><span class=\"cmt\"># Dangerous - allows redirection to any external site<\/span>\r\nhttps:\/\/example.com\/login?redirect=https:\/\/evil.com\/phishing\r\n<span class=\"cmt\"># Safer - validate against an allowlist of known paths<\/span>\r\nhttps:\/\/example.com\/login?redirect=%2Fdashboard  <span class=\"cmt\"># only relative paths<\/span><\/code><\/pre>\n<h3>GDPR and Tracking Consent<\/h3>\n<p>Under GDPR and similar regulations, using tracking parameters to identify or profile users typically requires explicit consent. If your campaigns use<code>fbclid<\/code>or<code>gclid<\/code>for remarketing, ensure your consent management platform is capturing the appropriate consent signals before these identifiers are processed.<\/p>\n<\/div>\n<div id=\"best-practices\">\n<h2>8. Best Practices<\/h2>\n<h3>For Marketers<\/h3>\n<ul class=\"checklist\">\n<li>Maintain a shared UTM taxonomy document &#8211; agree on naming conventions before the first campaign goes live<\/li>\n<li>Use a UTM builder spreadsheet or tool (Google&#8217;s Campaign URL Builder, Terminus) to generate consistent URLs<\/li>\n<li>Never use UTM parameters on internal links between pages of your own site<\/li>\n<li>Test every tracking URL before sending to a large audience<\/li>\n<li>Audit your analytics regularly for unexpected sources caused by inconsistent UTM values<\/li>\n<li>Shorten long URLs with a branded link shortener before publishing publicly<\/li>\n<\/ul>\n<h3>For Developers<\/h3>\n<ul class=\"checklist\">\n<li>Always use<code>URLSearchParams<\/code>or a well-tested library rather than manual string parsing<\/li>\n<li>Validate and sanitise all query parameter values before using them in application logic<\/li>\n<li>Never pass sensitive data through URL parameters &#8211; use encrypted POST bodies or secure cookies<\/li>\n<li>Implement a strict<code>Referrer-Policy<\/code>header to limit tracking parameter leakage<\/li>\n<li>Validate redirect parameter values against an allowlist to prevent open redirect attacks<\/li>\n<li>Strip or ignore known third-party tracking parameters (<code>fbclid<\/code>,<code>gclid<\/code>) from your canonical URLs to avoid indexing duplicate content<\/li>\n<li>Use<code>rel=\"noopener noreferrer\"<\/code>on outbound links to prevent referrer leakage<\/li>\n<\/ul>\n<h3>Canonical URLs and SEO<\/h3>\n<p>Search engines can index multiple versions of the same page if they have different query strings. A product page available at<code>\/shoes<\/code>,<code>\/shoes?color=red<\/code>, and<code>\/shoes?sort=price<\/code>might be treated as three separate pages. To avoid diluting your SEO authority, use canonical tags:<\/p>\n<pre><code><span class=\"cmt\">&lt;!-- In the &lt;head&gt; of all parameterised variants --&gt;<\/span>\r\n&lt;<span class=\"kw\">link<\/span> <span class=\"var\">rel<\/span>=<span class=\"str\">\"canonical\"<\/span> <span class=\"var\">href<\/span>=<span class=\"str\">\"https:\/\/example.com\/shoes\"<\/span> \/&gt;<\/code><\/pre>\n<p>Alternatively, configure your server or CDN to redirect tracking-only parameter combinations back to the clean URL after capturing the session data.<\/p>\n<\/div>\n<hr>\n<div class=\"conclusion-box\">\n<h2>Wrapping Up<\/h2>\n<p>URL parameters are deceptively simple &#8211; just text after a question mark &#8211; yet they underpin nearly every aspect of modern digital marketing, analytics, A\/B testing, and web application state. Mastering them means understanding not just the syntax, but the ecosystem of platforms, standards, and privacy considerations built around them.<\/p>\n<p>The key takeaways: use the<code>URLSearchParams<\/code>API instead of manual parsing, enforce a consistent UTM naming convention across your organisation, keep sensitive data out of URLs entirely, and stay aware of the shifting privacy landscape that is progressively limiting what URL-based tracking can reliably achieve.<\/p>\n<p>As third-party cookies fade and browser tracking protections strengthen, the humble URL parameter &#8211; combined with server-side attribution and consented first-party data &#8211; remains one of the most durable and transparent tools available. Used carefully, it&#8217;s also one of the most honest.<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Every time you click a link in an email campaign, a social media post, or an online advertisement, something subtle happens: a string of extra text is appended to the URL.<\/p>\n","protected":false},"author":1,"featured_media":47,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-46","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Understanding URL Parameters and Tracking Codes - ExpandURL<\/title>\n<meta name=\"description\" content=\"A complete guide to URL parameters and tracking codes: what they are, how UTM, fbclid, and gclid work, and how to use them safely and effectively.\" \/>\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.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Understanding URL Parameters and Tracking Codes - ExpandURL\" \/>\n<meta property=\"og:description\" content=\"A complete guide to URL parameters and tracking codes: what they are, how UTM, fbclid, and gclid work, and how to use them safely and effectively.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/\" \/>\n<meta property=\"og:site_name\" content=\"ExpandURL\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-16T02:55:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.expandurl.net\/blog\/wp-content\/uploads\/2026\/05\/utms.png\" \/>\n\t<meta property=\"og:image:width\" content=\"840\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"ExpandURL\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ExpandURL\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/\",\"url\":\"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/\",\"name\":\"Understanding URL Parameters and Tracking Codes - ExpandURL\",\"isPartOf\":{\"@id\":\"https:\/\/www.expandurl.net\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.expandurl.net\/blog\/wp-content\/uploads\/2026\/05\/utms.png\",\"datePublished\":\"2026-05-16T02:55:56+00:00\",\"dateModified\":\"2026-05-16T02:55:56+00:00\",\"author\":{\"@id\":\"https:\/\/www.expandurl.net\/blog\/#\/schema\/person\/305460cbaf8ea9729cd39214e2b622f9\"},\"description\":\"A complete guide to URL parameters and tracking codes: what they are, how UTM, fbclid, and gclid work, and how to use them safely and effectively.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#primaryimage\",\"url\":\"https:\/\/www.expandurl.net\/blog\/wp-content\/uploads\/2026\/05\/utms.png\",\"contentUrl\":\"https:\/\/www.expandurl.net\/blog\/wp-content\/uploads\/2026\/05\/utms.png\",\"width\":840,\"height\":480,\"caption\":\"tracking parameters\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.expandurl.net\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Understanding URL Parameters and Tracking Codes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.expandurl.net\/blog\/#website\",\"url\":\"https:\/\/www.expandurl.net\/blog\/\",\"name\":\"ExpandURL\",\"description\":\"Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.expandurl.net\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.expandurl.net\/blog\/#\/schema\/person\/305460cbaf8ea9729cd39214e2b622f9\",\"name\":\"ExpandURL\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.expandurl.net\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e188a164246c600f0cec7b14aec001469d0529676269f7d0fc364bfe2da4d7c2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e188a164246c600f0cec7b14aec001469d0529676269f7d0fc364bfe2da4d7c2?s=96&d=mm&r=g\",\"caption\":\"ExpandURL\"},\"sameAs\":[\"https:\/\/www.expandurl.net\/blog1\"],\"url\":\"https:\/\/www.expandurl.net\/blog\/author\/expandurl\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Understanding URL Parameters and Tracking Codes - ExpandURL","description":"A complete guide to URL parameters and tracking codes: what they are, how UTM, fbclid, and gclid work, and how to use them safely and effectively.","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.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/","og_locale":"en_US","og_type":"article","og_title":"Understanding URL Parameters and Tracking Codes - ExpandURL","og_description":"A complete guide to URL parameters and tracking codes: what they are, how UTM, fbclid, and gclid work, and how to use them safely and effectively.","og_url":"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/","og_site_name":"ExpandURL","article_published_time":"2026-05-16T02:55:56+00:00","og_image":[{"width":840,"height":480,"url":"https:\/\/www.expandurl.net\/blog\/wp-content\/uploads\/2026\/05\/utms.png","type":"image\/png"}],"author":"ExpandURL","twitter_card":"summary_large_image","twitter_misc":{"Written by":"ExpandURL","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/","url":"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/","name":"Understanding URL Parameters and Tracking Codes - ExpandURL","isPartOf":{"@id":"https:\/\/www.expandurl.net\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#primaryimage"},"image":{"@id":"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.expandurl.net\/blog\/wp-content\/uploads\/2026\/05\/utms.png","datePublished":"2026-05-16T02:55:56+00:00","dateModified":"2026-05-16T02:55:56+00:00","author":{"@id":"https:\/\/www.expandurl.net\/blog\/#\/schema\/person\/305460cbaf8ea9729cd39214e2b622f9"},"description":"A complete guide to URL parameters and tracking codes: what they are, how UTM, fbclid, and gclid work, and how to use them safely and effectively.","breadcrumb":{"@id":"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#primaryimage","url":"https:\/\/www.expandurl.net\/blog\/wp-content\/uploads\/2026\/05\/utms.png","contentUrl":"https:\/\/www.expandurl.net\/blog\/wp-content\/uploads\/2026\/05\/utms.png","width":840,"height":480,"caption":"tracking parameters"},{"@type":"BreadcrumbList","@id":"https:\/\/www.expandurl.net\/blog\/understanding-url-parameters-and-tracking-codes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.expandurl.net\/blog\/"},{"@type":"ListItem","position":2,"name":"Understanding URL Parameters and Tracking Codes"}]},{"@type":"WebSite","@id":"https:\/\/www.expandurl.net\/blog\/#website","url":"https:\/\/www.expandurl.net\/blog\/","name":"ExpandURL","description":"Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.expandurl.net\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.expandurl.net\/blog\/#\/schema\/person\/305460cbaf8ea9729cd39214e2b622f9","name":"ExpandURL","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.expandurl.net\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e188a164246c600f0cec7b14aec001469d0529676269f7d0fc364bfe2da4d7c2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e188a164246c600f0cec7b14aec001469d0529676269f7d0fc364bfe2da4d7c2?s=96&d=mm&r=g","caption":"ExpandURL"},"sameAs":["https:\/\/www.expandurl.net\/blog1"],"url":"https:\/\/www.expandurl.net\/blog\/author\/expandurl\/"}]}},"_links":{"self":[{"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/posts\/46","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/comments?post=46"}],"version-history":[{"count":7,"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/posts\/46\/revisions"}],"predecessor-version":[{"id":54,"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/posts\/46\/revisions\/54"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/media\/47"}],"wp:attachment":[{"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/media?parent=46"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/categories?post=46"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.expandurl.net\/blog\/wp-json\/wp\/v2\/tags?post=46"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}