Support » Plugin: Google Analytics Germanized (GDPR / DSGVO) » Ausgehendes Link tracking verhindert target=”_blank”

  • Resolved webwart

    (@webwart)


    Hallo,

    erst einmal herzlichen Dank für das gelungene Plugin.

    Bei der Verwendung ist mir aufgefallen, dass sobald das Tracking ausgehender Links aktiviert ist, sich die URLs nicht mehr in einem neuen Fenster / Tab öffnen, sofern ich target=”_blank” verwendet habe. Die URLs werden im gleichen Fenster / Tab geöffnet.

    Ist es leicht das zu beheben? Kann ich irgendwie dabei helfen (bin Software-Entwickler)?

    Viele Grüße!

Viewing 7 replies - 1 through 7 (of 7 total)
  • Meine kurze Analyse 😉

    Ist eigentlich alles in der gag-tracker.js drin.

    Das e.preventDefault() sorgt dafür, dass sich das neue Fenster nicht öffnet.
    Der Erfolgscallback nach dem Tracking öffnet die URL im gleichen Fenster.

    Kommentiere ich das preventDefault() aus und ersetze den Callback durch ein console.log(“success”) funktioniert alles wie ich es erwartet hätte.

    Ich hoffe, das hilft weiter und man kann vielleicht was ändern oder das Verhalten einstellbar machen?

    Viele Grüße!

    Plugin Author PascalBajorat

    (@pascalbajorat)

    Hi webwart,

    danke für dein Feedback.

    Ja, das Link-Tracking ist leider etwas problematisch, wir haben es nach der Vorgabe und Vorlage von Google eingebaut.

    Problem ist, wenn wir das e.preventDefault() entfernen, welches verhindert, dass der Link auslöst. Dann wird in vielen Browsern vor allem bei nicht target _blank Links die neue Seite geladen bevor das Link-Tracking getriggert werden kann.

    Deshalb wird der Aufruf erst unterbunden und dann im Callback mittels window.location durchgeführt. Das funktioniert nur leider nicht für jeden Fall perfekt. Siehe dazu auch die Doku: https://support.google.com/analytics/answer/1136920?hl=de

    Falls du hier bessere Möglichkeiten der Integration siehst, sind diese herzlich willkommen 🙂

    Beste Grüße
    Pascal

    Hallo Pascal,

    Ok, ich versteh das Problem…

    Ich seh eigentlich nur zwei Varianten:
    1. Eine Unterscheidung im Javascript, ungefähr so:

    var $trackOutboundLink_ga = function(url, callback)
    {
        ga('send', 'event', 'outbound', 'click', url, {
            'transport': 'beacon',
            'hitCallback': callback
        });
    };
    
    var $trackOutboundLink_gtag = function(url, callback)
    {
        gtag('event', 'click', {
            'event_category': 'outbound',
            'event_label': url,
            'transport_type': 'beacon',
            'event_callback': callback
        });
    };
    
    $('a:not([href^="' + gagTracker.url + '"], [href^="#"])').on('click', function (e) {
       var $linkTarget = $(this).attr('target');
       var $url = $(this).attr('href');
    
       var $callback;
    
       if ($target != '_blank') {
          e.preventDefault();
          $callback = function() { document.location = url; };
       }
    
       if (gagTracker.mode == 'ua') {
          $trackOutboundLink_ga($url, $callback);
       } else {
          $trackOutboundLink_gtag($url, $callback);
       }
    });

    // ACHTUNG: Ich habe den Code so nicht getestet 😉

    2. Zwei unterschiedliche onClick-Handler, die dann anhand der Bedingung für den Link rangeschrieben werden. Die Bedingung müsste dann noch die Prüfung beinhalten, ob das target != ‘_blank’ ist oder nicht.

    Ich bin leider nicht so firm in den jQuery Selektoren, aber es müsste wie bisher verodert die beiden Bedingung zur URL besitzen und verundet die Bedingung mit dem Target.

    Viele Grüße,
    Webwart

    Plugin Author PascalBajorat

    (@pascalbajorat)

    Hi Webwart,

    sieht von der grundlegende Idee doch schon mal super aus.
    Ich passe das mal für die Version 1.2.1 an.

    Wenn du magst, liste ich dich gerne in den Changelogs zu dem Update.
    Je nachdem wie du willst mit deinem WP Usernamen + Klarnamen oder nur WP User.

    Müsstest mir nur sagen wie es dir am liebsten ist, dann bekommst du dort noch einen Credit.

    Beste Grüße
    Pascal

    Hallo Pascal,

    Webwart ist prima, danke 🙂

    Ich habe gesehen, dass in meinem Codeschnipsel auf jeden Fall mindestens schon ein Fehler drin ist (ich konnte den leider immer noch nicht wirklich testen):

    Anstatt if ($target != '_blank') { muss es if ($linkTarget != '_blank') {heißen.

    Ich hoffe, der Rest funktioniert wenigstens 😉

    Ansonsten könnte man natürlich auch einfach in Abhängigkeit von dem Link-Target den Callback von function() { document.location = url; }; auf function() {window.open(url, ‘_blank’);` ändern. Wäre ja auch eigentlich ne schöne Variante.

    Viele Grüße, vielen Dank und einen schönen Abend noch!
    Webwart

    Plugin Author PascalBajorat

    (@pascalbajorat)

    Alles klar, kein Thema, danke. Ich hatte das ganze noch etwas angepasst. Die finale Version für die 1.2.1 sieht aktuell so aus und funktionierte in allen Tests bisher zuverlässig 🙂

    window.open bin ich unschlüssig, dass dürfte von vielen popup blockern blockiert werden. Aber die Variante unten funktioniert bisher sauber:

    var $trackOutboundLink_ga = function($url, $callback)
    {
        ga('send', 'event', 'outbound', 'click', $url, {
            'transport': 'beacon',
            'hitCallback': $callback
        });
    };
    
    var $trackOutboundLink_gtag = function($url, $callback)
    {
        gtag('event', 'click', {
            'event_category': 'outbound',
            'event_label': $url,
            'transport_type': 'beacon',
            'event_callback': $callback
        });
    };
    
    jQuery(document).ready(function($){
    
        if( gagTracker.link_tracking ) {
    
            $('a:not([href^="' + gagTracker.url + '"], [href^="#"])').on('click', function (e) {
    
                var $callback;
                var $url = $(this).attr('href');
    
                if( $(this).attr('target') !== '_blank' ) {
    
                    e.preventDefault();
    
                    $callback = function() {
                        window.location.href = $url;
                    };
    
                }
    
                if (gagTracker.mode == 'ua') {
                    $trackOutboundLink_ga($url, $callback);
                } else {
                    $trackOutboundLink_gtag($url, $callback);
                }
    
            });
    
        } // gagTracker.link_tracking
    
    });
    Plugin Author PascalBajorat

    (@pascalbajorat)

    Update 1.2.1 ist jetzt verfügbar.
    https://wordpress.org/plugins/ga-germanized/#developers

Viewing 7 replies - 1 through 7 (of 7 total)
  • The topic ‘Ausgehendes Link tracking verhindert target=”_blank”’ is closed to new replies.