Links mit Analytics-Kamagnen-Parametern werden in der Standard-Konfiguration von Varnish nicht als Seiten mit identischem Inhalt erkannt. Die beiden nachfolgenden URL werden von Varnish als verschiedene Seiten erkannt und deshalb unabhängig voneinander gecacht:
- URL: http://xonu.de
- URL: http://xonu.de?utm_campaign=ny2014&utm_medium=banner&utm_source=extern
Während die erste URL von einem Cache-Warmer vorbereitet wird, ist die zweite URL dem Cache-Warmer typischerweise nicht bekannt, sodass der erste Besucher etwas länger auf die Inhalte warten muss, obwohl sie aus dem Cache hätten geliefert werden können.
Damit dies geschieht, muss Varnish mitgeteilt werden, dass Analytics-Parameter den Inhalt nicht verändern. Varnish berechnet einen Hash basierend auf der angefragten URL. Diese URL kann in vcl_recv vor der Berechnung des Hashs manipuliert werden.
Durch Entfernen aller Analytics-Parameter aus der URL wird dem Varnish mitgeteilt, dass sie die Inhalte nicht verändert, sodass für die erste und zweite URL gleiche Inhalte ausgeliefert werden können.
In vcl_recv wird der folgende Zusatzblock hinzugefügt:
sub vcl_recv { if (req.url ~ "(\?|&)(utm_[^=]+)=") { set req.url = regsub(req.url, "\\\?", "?"); set req.url = regsuball(req.url, "&(utm_[^=]+)=([^&]+)", ""); set req.url = regsuball(req.url, "\?(utm_[^=]+)=([^&]+)", "?"); set req.url = regsub(req.url, "\?&", "?"); set req.url = regsub(req.url, "\?$", ""); } .... }
Alle Analytics-Parameter (s. Analytics URL Builder) starten mit „utm_“:
- utm_source: Kampagnenquelle
- utm_medium: Kampagnenmedium
- utm_term: Kampagnenbegriff
- utm_content: Kampagnen-Content
- utm_campaign: Kampagnenname
Wird also ein solcher Parameter erkannt, wird die URL davon bereinigt:
- Zeile 4 ersetzt /? durch ? (ohne Slash).
- Zeile 5 entfernt Analytics-Parameter, die nicht an erster Stelle stehen. In URL 2 werden hierdurch &utm_medium=banner und &utm_source=extern entfernt.
- Zeile 6 entfernt Analytics-Parameter, die an erster Stelle stehen. In URL 2 wird dadurch ?utm_campaign=ny2014 entfernt.
- Zeile 7 entfernt das überflüssige &-Zeichen, wenn die URL neben Analytics nicht weitere GET-Parameter an nicht-erster Stelle enthalten hatte (aus ?utm_campaign=ny2014&p=2 wäre ohne dieser Zeile ?&p=2 geworden).
- In dem Fall, dass alle GET-Parameter in der URL Analytics-Parameter waren, entfernt die Zeile 8 das übrig gebliebene ?-Zeichen.
Da die Auswertung der Kampagnen-Parameter durch den Analytics-Tracker Client-seitig durch JavaScripte geschieht, bleibt das Tracking davon unbetroffen.