{"id":916,"date":"2026-10-29T13:47:12","date_gmt":"2026-10-29T13:47:12","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/whatsapp-template-utm-tracking\/"},"modified":"2026-10-29T13:47:16","modified_gmt":"2026-10-29T13:47:16","slug":"whatsapp-template-utm-tracking","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/","title":{"rendered":"Dynamic URL button with UTM in WhatsApp templates: track clicks and sales in GA4"},"content":{"rendered":"\n<p><em>Updated on October 29, 2026<\/em><\/p>\n\n\n\n<p>To measure clicks and sales from a WhatsApp template in GA4, use a URL button with a dynamic suffix: the approved template has a fixed address ending in <code>{{1}}<\/code>, and on each send you pass a value that identifies the campaign (and, if you want, the individual send). That value becomes UTMs (<code>utm_source=whatsapp<\/code>, <code>utm_medium<\/code>, <code>utm_campaign<\/code>), either directly in the URL or through a redirect on your own domain, and GA4 attributes the session and the purchase to the campaign. On the WhatsApp side, you match this with the status webhook and Meta&#8217;s template analytics to get the full funnel: delivered, read, clicked and sold.<\/p>\n\n\n\n<p>This guide covers Meta&#8217;s rules for URLs in templates, two ways to set up UTMs, the send payload and a report template.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Meta&#8217;s rules for the URL button<\/h2>\n\n\n\n<p>According to the <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/components\" target=\"_blank\" rel=\"noreferrer noopener\">template components documentation<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Rule<\/th><th>Limit<\/th><\/tr><\/thead><tbody><tr><td>URL buttons per template<\/td><td>Up to 2<\/td><\/tr><tr><td>Button text<\/td><td>Up to 25 characters<\/td><\/tr><tr><td>URL length<\/td><td>Up to 2,000 characters<\/td><\/tr><tr><td>Variables in the URL<\/td><td>At most 1, always at the end of the address<\/td><\/tr><tr><td>Sample value<\/td><td>Required when the URL has a variable<\/td><\/tr><tr><td>Special characters<\/td><td>Must be percent-encoded (e.g., a space becomes <code>%20<\/code>); unencoded characters can make the send fail<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>The practical consequence matters: you can&#8217;t put the variable in the middle of the URL or have two variables (one for the campaign and one for the contact). All tracking has to fit in a single suffix at the end.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Two ways to pass UTMs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Option 1: fixed UTMs in the URL, variable in the last parameter<\/h3>\n\n\n\n<p>The template is created with the campaign&#8217;s UTMs, and the variable fills only the last parameter:<\/p>\n\n\n\n<p><code>https:\/\/www.store.com\/offers?utm_source=whatsapp&amp;utm_medium=template&amp;utm_campaign=bf2026&amp;utm_content={{1}}<\/code><\/p>\n\n\n\n<p>On send, <code>{{1}}<\/code> gets something like <code>sneaker_offer_a<\/code>. Pros: simple, no server needed. Cons: <code>utm_campaign<\/code> is locked into the template, so each new campaign requires a new template (and a new approval); and the value you pass must be URL-encoded.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Option 2: redirect on your own domain (recommended)<\/h3>\n\n\n\n<p>The template has a short URL on your own domain:<\/p>\n\n\n\n<p><code>https:\/\/www.store.com\/w\/{{1}}<\/code><\/p>\n\n\n\n<p>On send, <code>{{1}}<\/code> gets a short code, such as <code>k7Qm2x<\/code>. Your server stores what that code means (campaign, template, destination, send ID) and replies with a 302 redirect to the final URL with all the UTMs. Pros:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>one template serves many campaigns, with no new approval;<\/li>\n\n\n<li>you can change the destination after sending, if the page changes;<\/li>\n\n\n<li>your server logs the click instantly, with the send&#8217;s code;<\/li>\n\n\n<li>the customer sees your company&#8217;s domain, not an unfamiliar shortener.<\/li>\n\n<\/ul>\n\n\n\n<p>Meta&#8217;s documentation doesn&#8217;t address third-party URL shorteners. Using your own domain avoids the question and makes it clear to the customer where they&#8217;re going.<\/p>\n\n\n\n<p>A minimal redirector in Node.js (Express):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-js\">import express from 'express';\nconst app = express();\n\napp.get('\/w\/:code', async (req, res) =&gt; {\n  const link = await db.links.findOne({ code: req.params.code });\n  if (!link) return res.redirect(302, 'https:\/\/www.store.com\/');\n\n  await db.clicks.insert({ code: link.code, wamid: link.wamid, at: new Date() });\n\n  const url = new URL(link.destination);\n  url.searchParams.set('utm_source', 'whatsapp');\n  url.searchParams.set('utm_medium', 'template');\n  url.searchParams.set('utm_campaign', link.campaign);\n  url.searchParams.set('utm_content', link.template);\n  url.searchParams.set('utm_id', link.campaign_id);\n  res.redirect(302, url.toString());\n});<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">How to build UTMs for GA4<\/h2>\n\n\n\n<p>GA4 recommends always setting <code>utm_source<\/code>, <code>utm_medium<\/code> and <code>utm_campaign<\/code>, and also suggests <code>utm_id<\/code> (<a href=\"https:\/\/support.google.com\/analytics\/answer\/10917952\" target=\"_blank\" rel=\"noreferrer noopener\">Google Analytics help on UTMs<\/a>). Values are case-sensitive: <code>whatsapp<\/code> and <code>WhatsApp<\/code> become two different sources. Pick a convention and use lowercase.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Parameter<\/th><th>Suggested value<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>utm_source<\/code><\/td><td><code>whatsapp<\/code><\/td><td>Traffic source<\/td><\/tr><tr><td><code>utm_medium<\/code><\/td><td><code>template<\/code> (marketing) or <code>utility<\/code><\/td><td>Separate campaigns from transactional notices<\/td><\/tr><tr><td><code>utm_campaign<\/code><\/td><td><code>bf2026<\/code>, <code>winback_oct<\/code><\/td><td>Campaign name<\/td><\/tr><tr><td><code>utm_content<\/code><\/td><td>template name or test variant<\/td><td>Compare copy and buttons<\/td><\/tr><tr><td><code>utm_id<\/code><\/td><td>campaign ID in your system<\/td><td>Join with cost data<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>About channel groupings: in GA4&#8217;s default channel group, the channel rules look at source and medium. With <code>utm_medium=template<\/code>, traffic may land in &#8220;Unassigned&#8221; or in another channel, depending on the rules and the list of sites Google maintains. To see WhatsApp as its own channel, create a custom channel group with the condition &#8220;Session source exactly matches whatsapp.&#8221;<\/p>\n\n\n\n<p>Don&#8217;t put phone numbers, names, emails or other personal data in UTMs. Google prohibits sending personally identifiable information to Analytics, and the URL also stays in the browser history. To link a click to a contact, use the redirect&#8217;s opaque code and store the mapping in your database.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The template and the send payload<\/h2>\n\n\n\n<p>Template creation (same format as the Cloud API), with a body, a dynamic URL button and an opt-out button:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"name\": \"weekly_offer_url\",\n  \"language\": \"en_US\",\n  \"category\": \"MARKETING\",\n  \"components\": [\n    {\n      \"type\": \"BODY\",\n      \"text\": \"Hi, {{1}}! The kit you looked at is 20% off until Sunday.\",\n      \"example\": { \"body_text\": [[\"Ana\"]] }\n    },\n    {\n      \"type\": \"BUTTONS\",\n      \"buttons\": [\n        {\n          \"type\": \"URL\",\n          \"text\": \"See offer\",\n          \"url\": \"https:\/\/www.store.com\/w\/{{1}}\",\n          \"example\": [\"k7Qm2x\"]\n        },\n        { \"type\": \"QUICK_REPLY\", \"text\": \"Stop offers\" }\n      ]\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p>Sending to a contact, passing the name in the body and the code in the button. <code>index<\/code> is the URL button&#8217;s position in the list (starting at 0):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"5511999999999\",\n  \"type\": \"template\",\n  \"template\": {\n    \"name\": \"weekly_offer_url\",\n    \"language\": { \"code\": \"en_US\" },\n    \"components\": [\n      {\n        \"type\": \"body\",\n        \"parameters\": [{ \"type\": \"text\", \"text\": \"Ana\" }]\n      },\n      {\n        \"type\": \"button\",\n        \"sub_type\": \"url\",\n        \"index\": \"0\",\n        \"parameters\": [{ \"type\": \"text\", \"text\": \"k7Qm2x\" }]\n      }\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<p>The flow in your system, per contact:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Generate a unique short code and save <code>code \u2192 campaign, template, destination<\/code>.<\/li>\n\n\n<li>Send the template with the code in the button parameter.<\/li>\n\n\n<li>Store the <code>wamid<\/code> returned by the API alongside the code.<\/li>\n\n\n<li>Update <code>delivered<\/code>, <code>read<\/code> or <code>failed<\/code> when the status webhook arrives.<\/li>\n\n\n<li>Log the click in the redirector and let GA4 handle the session and the purchase.<\/li>\n\n<\/ol>\n\n\n\n<p>If you&#8217;re sending to many contacts, generate the codes in bulk before the campaign. The article on <a href=\"https:\/\/vectalk.com.br\/blog\/en\/send-whatsapp-template-message-api\/\">how to send a template through the API<\/a> details the other payload components.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Measuring clicks through Meta<\/h2>\n\n\n\n<p>Besides your redirector, Meta counts button clicks. According to the <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/analytics\/\" target=\"_blank\" rel=\"noreferrer noopener\">analytics documentation<\/a>, template analytics return clicks on URL and quick reply buttons for marketing and utility templates, with the types <code>url_button<\/code> (total) and <code>unique_url_button<\/code> (distinct accounts that clicked). Three details:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>you must first enable template analytics on the account (in WhatsApp Manager or with <code>is_enabled_for_insights=true<\/code>), and once enabled they can&#8217;t be turned off;<\/li>\n\n\n<li>read and click data is available for up to 7 days from the send date;<\/li>\n\n\n<li>click tracking can be turned off per template with <code>cta_url_link_tracking_opted_out<\/code>.<\/li>\n\n<\/ul>\n\n\n\n<p>Sample query (with placeholder IDs):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -g 'https:\/\/graph.facebook.com\/v26.0\/&lt;WABA_ID&gt;\/template_analytics?start=1793145600&amp;end=1793232000&amp;granularity=daily&amp;metric_types=sent,delivered,read,clicked&amp;template_ids=[&lt;TEMPLATE_ID&gt;]' \\\n  -H 'Authorization: Bearer &lt;TOKEN&gt;'<\/code><\/pre>\n\n\n\n<p>Meta&#8217;s numbers and your redirector&#8217;s don&#8217;t have to match exactly: they&#8217;re different measurements. Use Meta to compare templates against each other and your redirector to link clicks to sends and sales.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Report: from send to sale<\/h2>\n\n\n\n<p>With the redirect code, you can bring everything together in one table per campaign. Example in SQL, assuming the tables <code>sends<\/code> (one row per message, with the link code and the latest webhook status), <code>clicks<\/code> (redirector) and <code>orders<\/code> (with the link code saved at checkout):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-sql\">SELECT\n  s.campaign,\n  COUNT(*) FILTER (WHERE s.status IN ('delivered', 'read')) AS delivered,\n  COUNT(*) FILTER (WHERE s.status = 'read') AS read,\n  COUNT(c.code) AS clicked,\n  COALESCE(SUM(o.orders), 0) AS orders,\n  COALESCE(SUM(o.revenue), 0) AS revenue,\n  ROUND(COUNT(*) FILTER (WHERE s.status IN ('delivered', 'read')) * 0.3217, 2) AS meta_cost_brl\nFROM sends s\nLEFT JOIN (SELECT DISTINCT code FROM clicks) c ON c.code = s.code\nLEFT JOIN (\n  SELECT link_code, COUNT(*) AS orders, SUM(amount) AS revenue\n  FROM orders GROUP BY link_code\n) o ON o.link_code = s.code\nGROUP BY s.campaign;<\/code><\/pre>\n\n\n\n<p>The result becomes a report like this (fictional example, just to show the format):<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Campaign<\/th><th>Delivered<\/th><th>Read<\/th><th>Clicked<\/th><th>Orders<\/th><th>Revenue<\/th><th>Meta cost<\/th><\/tr><\/thead><tbody><tr><td>bf2026_sneakers<\/td><td>4,000<\/td><td>2,900<\/td><td>610<\/td><td>48<\/td><td>R$ 9,120.00<\/td><td>R$ 1,286.80<\/td><\/tr><tr><td>winback_oct<\/td><td>1,500<\/td><td>820<\/td><td>95<\/td><td>7<\/td><td>R$ 980.00<\/td><td>R$ 482.55<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>The cost uses Meta&#8217;s marketing rate for Brazil in effect since October 1, 2026 (R$ 0.3217, in Brazilian reais, per delivered message); for other countries, use the rate for the recipient&#8217;s country. In GA4, the same analysis shows up in the traffic acquisition report filtered by <code>Session source = whatsapp<\/code>, with the purchase event marked as a key event.<\/p>\n\n\n\n<p>One caveat: without user identification (User-ID), GA4 generally only attributes the sale if it happens in the same browser as the click. If the customer clicks on their phone and buys on their computer, the sale disappears from the GA4 report, but it can show up in yours if checkout stores the link code. To send the sale back to Meta, see the <a href=\"https:\/\/vectalk.com.br\/blog\/en\/meta-conversions-api-whatsapp\/\">Conversions API for WhatsApp<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to do this with Vectalk<\/h2>\n\n\n\n<p>In Vectalk you create the template with a dynamic URL button through the API (<a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/templates\/create\">create template<\/a>), with components in the Cloud API format shown above, and send it with the button parameter through the messages endpoint (<a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/messages\/send-template\">send template<\/a>, &#8220;Bot\u00e3o com par\u00e2metro din\u00e2mico&#8221; example). Status webhooks arrive at the endpoint you register, ready to feed the <code>sends<\/code> table.<\/p>\n\n\n\n<p>The redirector, GA4 and the report live in your system: Vectalk has no campaign tool or URL shortener in its dashboard. Each delivered message is deducted from your prepaid balance, with no card registered with Meta. Create your account at <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a>. If you&#8217;re just getting started, read the <a href=\"https:\/\/vectalk.com.br\/blog\/en\/official-whatsapp-api\/\">official WhatsApp API guide<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Can I put the variable in the middle of the URL?<\/h3>\n\n\n\n<p>No. Meta accepts at most one variable in the button URL, and it is always appended to the end of the address.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I use a third-party shortened link in the button?<\/h3>\n\n\n\n<p>The components documentation doesn&#8217;t mention shorteners. We recommend a redirect on your own domain: the customer recognizes the address, and you control the destination and log the click.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does it work in utility templates?<\/h3>\n\n\n\n<p>Yes, the dynamic URL button exists in utility templates, for example as an order tracking link. Use a different <code>utm_medium<\/code> (such as <code>utility<\/code>) so it doesn&#8217;t mix with campaigns. Meta also counts clicks from utility templates in analytics.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why does GA4 show fewer clicks than my redirector?<\/h3>\n\n\n\n<p>Blockers, cookie consent, slow-loading pages and repeated clicks make the numbers diverge. The redirector counts the request; GA4 counts the session that loaded the tag.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I track ads that lead to WhatsApp?<\/h3>\n\n\n\n<p>That&#8217;s a different path: click-to-WhatsApp ads carry source data in the customer&#8217;s first message. See <a href=\"https:\/\/vectalk.com.br\/blog\/en\/track-click-to-whatsapp-ads\/\">how to track Click-to-WhatsApp ads<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Official sources consulted on October 29, 2026:<\/strong> <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/components\" target=\"_blank\" rel=\"noreferrer noopener\">Template components<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/analytics\/\" target=\"_blank\" rel=\"noreferrer noopener\">WhatsApp Business Platform analytics<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/pricing\" target=\"_blank\" rel=\"noreferrer noopener\">Pricing<\/a>, <a href=\"https:\/\/support.google.com\/analytics\/answer\/10917952\" target=\"_blank\" rel=\"noreferrer noopener\">UTM parameters in Google Analytics<\/a>, <a href=\"https:\/\/support.google.com\/analytics\/answer\/9756891\" target=\"_blank\" rel=\"noreferrer noopener\">GA4 default channel group<\/a>, <a href=\"https:\/\/support.google.com\/analytics\/answer\/6366371?hl=en\" target=\"_blank\" rel=\"noreferrer noopener\">Best practices to avoid sending PII to Analytics<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/messages\/send-template\">Vectalk documentation: send template<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to use the WhatsApp template dynamic URL button to pass UTMs to GA4, measure clicks and sales per campaign and match them with the status webhook.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-916","post","type-post","status-publish","format-standard","hentry","category-blog"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>WhatsApp template UTM tracking: clicks and sales in GA4<\/title>\n<meta name=\"description\" content=\"WhatsApp template UTM tracking: URL button with a dynamic suffix, redirect on your own domain, GA4 with utm_source=whatsapp and a sales report.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WhatsApp template UTM tracking: clicks and sales in GA4\" \/>\n<meta property=\"og:description\" content=\"WhatsApp template UTM tracking: URL button with a dynamic suffix, redirect on your own domain, GA4 with utm_source=whatsapp and a sales report.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-29T13:47:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T13:47:16+00:00\" \/>\n<meta name=\"author\" content=\"wanderleyfcunha\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"wanderleyfcunha\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-template-utm-tracking\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-template-utm-tracking\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"Dynamic URL button with UTM in WhatsApp templates: track clicks and sales in GA4\",\"datePublished\":\"2026-10-29T13:47:12+00:00\",\"dateModified\":\"2026-10-29T13:47:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-template-utm-tracking\\\/\"},\"wordCount\":1424,\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-template-utm-tracking\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-template-utm-tracking\\\/\",\"name\":\"WhatsApp template UTM tracking: clicks and sales in GA4\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-29T13:47:12+00:00\",\"dateModified\":\"2026-10-29T13:47:16+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"WhatsApp template UTM tracking: URL button with a dynamic suffix, redirect on your own domain, GA4 with utm_source=whatsapp and a sales report.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-template-utm-tracking\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-template-utm-tracking\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-template-utm-tracking\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dynamic URL button with UTM in WhatsApp templates: track clicks and sales in GA4\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\",\"name\":\"Blog Vectalk\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\",\"name\":\"wanderleyfcunha\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"caption\":\"wanderleyfcunha\"},\"sameAs\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WhatsApp template UTM tracking: clicks and sales in GA4","description":"WhatsApp template UTM tracking: URL button with a dynamic suffix, redirect on your own domain, GA4 with utm_source=whatsapp and a sales report.","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:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/","og_locale":"en_US","og_type":"article","og_title":"WhatsApp template UTM tracking: clicks and sales in GA4","og_description":"WhatsApp template UTM tracking: URL button with a dynamic suffix, redirect on your own domain, GA4 with utm_source=whatsapp and a sales report.","og_url":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-29T13:47:12+00:00","article_modified_time":"2026-10-29T13:47:16+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"Dynamic URL button with UTM in WhatsApp templates: track clicks and sales in GA4","datePublished":"2026-10-29T13:47:12+00:00","dateModified":"2026-10-29T13:47:16+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/"},"wordCount":1424,"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/","url":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/","name":"WhatsApp template UTM tracking: clicks and sales in GA4","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-29T13:47:12+00:00","dateModified":"2026-10-29T13:47:16+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"WhatsApp template UTM tracking: URL button with a dynamic suffix, redirect on your own domain, GA4 with utm_source=whatsapp and a sales report.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-utm-tracking\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Dynamic URL button with UTM in WhatsApp templates: track clicks and sales in GA4"}]},{"@type":"WebSite","@id":"https:\/\/vectalk.com.br\/blog\/#website","url":"https:\/\/vectalk.com.br\/blog\/","name":"Blog Vectalk","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vectalk.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b","name":"wanderleyfcunha","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","caption":"wanderleyfcunha"},"sameAs":["https:\/\/vectalk.com.br\/blog"]}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/comments?post=916"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/916\/revisions"}],"predecessor-version":[{"id":919,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/916\/revisions\/919"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}