diff --git a/app/assets/javascripts/discourse/lib/click-track.js.es6 b/app/assets/javascripts/discourse/lib/click-track.js.es6
index a0e8264b786..4ff6de85d70 100644
--- a/app/assets/javascripts/discourse/lib/click-track.js.es6
+++ b/app/assets/javascripts/discourse/lib/click-track.js.es6
@@ -1,5 +1,11 @@
 import DiscourseURL from 'discourse/lib/url';
 
+export function isValidLink($link) {
+  return ($link.hasClass("track-link") ||
+          ($link.closest('.onebox-result,.onebox-body').length === 0 &&
+           $link.has('.badge-category').length === 0))
+};
+
 export default {
   trackClick(e) {
     // cancel click if triggered as part of selection.
@@ -32,8 +38,7 @@ export default {
       var $badge = $('span.badge', $link);
       if ($badge.length === 1) {
         // don't update counts in category badge nor in oneboxes (except when we force it)
-        if ($link.hasClass("track-link") ||
-            $link.closest('.badge-category,.onebox-result,.onebox-body').length === 0) {
+        if (isValidLink($link)) {
           var html = $badge.html();
           if (/^\d+$/.test(html)) { $badge.html(parseInt(html, 10) + 1); }
         }
diff --git a/app/assets/javascripts/discourse/views/post.js.es6 b/app/assets/javascripts/discourse/views/post.js.es6
index d59cdaa488d..5f8479388d0 100644
--- a/app/assets/javascripts/discourse/views/post.js.es6
+++ b/app/assets/javascripts/discourse/views/post.js.es6
@@ -4,6 +4,7 @@ import DiscourseURL from 'discourse/lib/url';
 import { default as computed, on } from 'ember-addons/ember-computed-decorators';
 import { fmt } from 'discourse/lib/computed';
 import { decorateLinks as decorateCategoryHashtagLinks } from 'discourse/lib/category-hashtags';
+import { isValidLink } from 'discourse/lib/click-track';
 
 const DAY = 60 * 50 * 1000;
 
@@ -194,8 +195,7 @@ const PostView = Discourse.GroupedView.extend(Ember.Evented, {
 
         if (valid) {
           // don't display badge counts on category badge & oneboxes (unless when explicitely stated)
-          if ($link.hasClass("track-link") ||
-              $link.closest('.badge-category,.onebox-result,.onebox-body').length === 0) {
+          if (isValidLink($link)) {
             $link.append("<span class='badge badge-notification clicks' title='" + I18n.t("topic_map.clicks", {count: lc.clicks}) + "'>" + number(lc.clicks) + "</span>");
           }
         }
diff --git a/test/javascripts/lib/click-track-test.js.es6 b/test/javascripts/lib/click-track-test.js.es6
index 3b228d59aec..6b0c7c630da 100644
--- a/test/javascripts/lib/click-track-test.js.es6
+++ b/test/javascripts/lib/click-track-test.js.es6
@@ -16,21 +16,25 @@ module("lib:click-track", {
     windowOpen = sandbox.stub(window, "open").returns(win);
     sandbox.stub(win, "focus");
 
-    fixture().html([
-      '<div id="topic" id="1337">',
-      '  <article data-post-id="42" data-user-id="3141">',
-      '    <a href="http://www.google.com">google.com</a>',
-      '    <a class="lightbox back quote-other-topic" href="http://www.google.com">google.com</a>',
-      '    <a id="with-badge" data-user-id="314" href="http://www.google.com">google.com<span class="badge">1</span></a>',
-      '    <a id="with-badge-but-not-mine" href="http://www.google.com">google.com<span class="badge">1</span></a>',
-      '    <div class="onebox-result">',
-      '      <a id="inside-onebox" href="http://www.google.com">google.com<span class="badge">1</span></a>',
-      '      <a id="inside-onebox-forced" class="track-link" href="http://www.google.com">google.com<span class="badge">1</span></a>',
-      '    </div>',
-      '    <a id="same-site" href="http://discuss.domain.com">forum</a>',
-      '    <a class="attachment" href="http://discuss.domain.com/uploads/default/1234/1532357280.txt">log.txt</a>',
-      '  </article>',
-      '</div>'].join("\n"));
+    fixture().html(
+      `<div id="topic" id="1337">
+        <article data-post-id="42" data-user-id="3141">
+          <a href="http://www.google.com">google.com</a>
+          <a class="lightbox back quote-other-topic" href="http://www.google.com">google.com</a>
+          <a id="with-badge" data-user-id="314" href="http://www.google.com">google.com<span class="badge">1</span></a>
+          <a id="with-badge-but-not-mine" href="http://www.google.com">google.com<span class="badge">1</span></a>
+          <div class="onebox-result">
+            <a id="inside-onebox" href="http://www.google.com">google.com<span class="badge">1</span></a>
+            <a id="inside-onebox-forced" class="track-link" href="http://www.google.com">google.com<span class="badge">1</span></a>
+          </div>
+          <a id="same-site" href="http://discuss.domain.com">forum</a>
+          <a class="attachment" href="http://discuss.domain.com/uploads/default/1234/1532357280.txt">log.txt</a>
+          <a class="badge-wrapper bullet" href="http://discuss.domain.com">
+            <span class="badge-category-bg"></span>
+            <span class="badge-category"></span>
+          </a>
+        </article>
+      </div>`);
   }
 });
 
@@ -64,6 +68,10 @@ test("does not track clicks on quote buttons", function() {
   ok(track(generateClickEventOn('.quote-other-topic')));
 });
 
+test("does not track clicks on category badges", () => {
+  ok(!track(generateClickEventOn('.badge-wrapper')));
+});
+
 test("removes the href and put it as a data attribute", function() {
   track(generateClickEventOn('a'));