最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Remove UTM Parameters from URL - Stack Overflow

programmeradmin1浏览0评论

I use UTM parameters to track ining links in Google Analytics.

Let's say my URL looks like this

/shop?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale

I want to clean the URL. The desired result is

/shop

On the web I found the following snippet

(function() {
    var win = window;
    var removeUtms = function(){
        var location = win.location;
        if (location.search.indexOf('utm_') != -1 && history.replaceState) {
            history.replaceState({}, '', window.location.toString().replace(/(\&|\?)utm([_a-z0-9=]+)/g, ""));
        }
    };
    ga('send', 'pageview', { 'hitCallback': removeUtms });
})();

At the moment my Google Analytics Template in my CMS looks like this

<?php
    /**
     * To use this script, please fill in your Google Analytics ID below
     */
    $GoogleAnalyticsId = 'UA-bla-bla';
    /**
     * DO NOT EDIT ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING!
     */
    if ($GoogleAnalyticsId != 'UA-XXXXX-X' && !BE_USER_LOGGED_IN && sha1(session_id() . (!Config::get('disableIpCheck') ? Environment::get('ip') : '') . 'BE_USER_AUTH') != Input::cookie('BE_USER_AUTH')): ?>
    <script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','.js','ga');
      ga('create', '<?php echo $GoogleAnalyticsId; ?>', 'auto');
      <?php if ($GLOBALS['TL_CONFIG']['privacyAnonymizeGA']): ?>
        ga('set', 'anonymizeIp', true);
      <?php endif; ?>
      ga('send', 'pageview');
    </script>
<?php endif; ?>

...and I have no idea how to bring those codes together.

Maybe there is even a better solution to my problem?

I use UTM parameters to track ining links in Google Analytics.

Let's say my URL looks like this

https://www.domain.tld/shop?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale

I want to clean the URL. The desired result is

https://www.domain.tld/shop

On the web I found the following snippet

(function() {
    var win = window;
    var removeUtms = function(){
        var location = win.location;
        if (location.search.indexOf('utm_') != -1 && history.replaceState) {
            history.replaceState({}, '', window.location.toString().replace(/(\&|\?)utm([_a-z0-9=]+)/g, ""));
        }
    };
    ga('send', 'pageview', { 'hitCallback': removeUtms });
})();

At the moment my Google Analytics Template in my CMS looks like this

<?php
    /**
     * To use this script, please fill in your Google Analytics ID below
     */
    $GoogleAnalyticsId = 'UA-bla-bla';
    /**
     * DO NOT EDIT ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING!
     */
    if ($GoogleAnalyticsId != 'UA-XXXXX-X' && !BE_USER_LOGGED_IN && sha1(session_id() . (!Config::get('disableIpCheck') ? Environment::get('ip') : '') . 'BE_USER_AUTH') != Input::cookie('BE_USER_AUTH')): ?>
    <script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','https://www.google-analytics./analytics.js','ga');
      ga('create', '<?php echo $GoogleAnalyticsId; ?>', 'auto');
      <?php if ($GLOBALS['TL_CONFIG']['privacyAnonymizeGA']): ?>
        ga('set', 'anonymizeIp', true);
      <?php endif; ?>
      ga('send', 'pageview');
    </script>
<?php endif; ?>

...and I have no idea how to bring those codes together.

Maybe there is even a better solution to my problem?

Share Improve this question asked Jan 29, 2018 at 17:23 Sr. SchneiderSr. Schneider 7971 gold badge11 silver badges23 bronze badges 6
  • Do you want to handle it in javascript only, or within php itself? – IncredibleHat Commented Jan 29, 2018 at 17:26
  • What's the difference? For users it's the same, isn't it? – Sr. Schneider Commented Jan 29, 2018 at 17:29
  • We handled it in PHP, because it also allows us to catch the utm data and store it in a database for further metric processing on our end. Then we do a header location redirect to the clean url. Its a real pain to do all the ajax calls in javascript only (and some users stupidly turn off js). So there is a difference. But it sounds like you just want GA to handle it all, so yeah, go with a javascript method. – IncredibleHat Commented Jan 29, 2018 at 17:31
  • 1 Well, I got the idea, but in my case it's very simple: I want to send the information stored in the UTMs over to Google Analytics and after that I want a clean url. – Sr. Schneider Commented Jan 29, 2018 at 17:34
  • 2 I never heard about this before. So if I add ?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale to ANY url of ANY website using GA it automatically removes the query string? Are you sure? Source? – Sr. Schneider Commented Jan 30, 2018 at 8:32
 |  Show 1 more ment

3 Answers 3

Reset to default 6

Here is a solution I came up with that uses the History API to remove any query parameters from the URL starting with utm_. The important thing is to change the URL after the page view data is sent to Google Analytics with the utm parameters. To do that, we use the ga function with a callback and put it after the call to ga('send', 'pageview'), which is normally the last line of the Google Analytics tracking snippet. I used history.replaceState instead of history.pushState so that if the user navigates back to this page, the utm parameters will not be there again. This basically assumes that you want to report the request with utm parameters only once. I believe this fits most cases. I put in a feature check so it will do nothing if history.replaceState is not supported by the browser.

// -- Google Analytics tracking snippet here --
// ...
// ga('send', 'pageview');

/**********************************************************************
 * add the following code after the Google Analytics tracking snippet *
 **********************************************************************/

// remove utm_* query parameters
ga(function() {
  function paramIsNotUtm(param) { return param.slice(0, 4) !== 'utm_'; }
  if (history && history.replaceState && location.search) {
    var params = location.search.slice(1).split('&');
    var newParams = params.filter(paramIsNotUtm);
    if (newParams.length < params.length) {
      var search = newParams.length ? '?' + newParams.join('&') : '';
      var url = location.pathname + search + location.hash;
      history.replaceState(null, null, url);
    }
  }
});

If you want to remove all query data from the url you could split the url string on the ? sign as suggested here: Remove querystring from URL

Copy urls into url.txt

sed 's/?utm[^ ]*//g' url.txt
发布评论

评论列表(0)

  1. 暂无评论