Google Analytics Browser-Caching
Wenn Ihr beim Google Pagespeed Inside alles gemacht habt und immer noch das Browser-Caching bemängelt wird, weil Ihr den Google Analytics nutzt, könnt Ihr den analytics.js auch intern laden lassen. Wie das funktioniert, schreiben wir Euch hier auf.
Das ganze ist eine relativ einfache Sache und schnell bewerkstelligt. Ihr müsst lediglich ein paar Anpassungen im Google Analytics Code und in einer neuen Datei machen.
Warum wird eigentlich immer das Browser-Caching auf dem analytics.js bemängelt?
Für alle Daten, die intern geladen werden, könnt Ihr das Browser-Caching nutzen. Da der Google Analytics Code aber von extern, sprich von Google direkt kommt, könnt Ihr in eure htaccess reinschreiben, was Ihr wollt. Er wir nicht in das Browser-Caching fallen.
Das beheben wir nun in 5 Schritten.
Schritt 1 den analytics.js erst mal in eine interne Datei verpacken.
Dafür müsst Ihr die analytics.js aufrufen. Wo diese genau liegt, sagt euch Google Pagespeed Inside selbst.
- https://www.google-analytics.com/analytics.js (Diese Adresse in den Browser Kopieren)
Nach dem Aufruf seht Ihr eine klein Komprimierte js Datei. Hier einmal „STRG + A“ dann „STRG + C“ und in einen Editor mit „STRG + V“ wieder einfügen.
Speicher das Ganze mit dem Namen „my-local-analytics.js“ ab.
Diese Datei ladet Ihr auf euren Server. Wohin ist eigentlich völlig egal, da bisher der Pfad zu Datei noch nicht angegeben ist.
Dies machen wir im Schritt 2.
Hierfür müsst Ihr euren Google Analytics Code etwas bearbeiten.
Der sieht ja im normalerweise so aus.
<script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXXXX-X']); _gaq.push(['_gat._anonymizeIp']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script>
Darin finden wir auch die Quelle der js Datei
'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Hier schreiben wir nun einen Lokalen Pfad rein. Der sollte natürlich dahin verweisen, wo Ihr eure „my-local-analytics.js“ abgelegt habt.
Könnte dann so aussehn.
'https://ssl' : 'http://www') + '.meine-seite.de/java/my-local-analytics.js';
Ihr seid nicht mehr weit weg von eurem Ziel.
Im Grunde fehlt nur noch eine Datei, zum Ausführen, die Ihr euch basteln müsst.
Dies ist Schritt 3
Da die analytics.js im 2 Stunden takt von Google ausgeführt wird, daher auch die 2 Stunden, die Ihr nicht in das Browser-Caching bekommt, müsst Ihr diese auch ausführen lassen. Nun könnt Ihr nicht die js Datei selbst ausführen, sondern benötigt dafür einen kleinen PHP Script. Diese Datei nennen wir „update-google.php“
Was Ihr hier beachten müsst, ist das der absolute Pfad zu eurer „my-local-analytics.js, hier eingetragen wird. Dies muss an der stelle $localfile passieren.
<? $remoteFile = 'https://www.google-analytics.com/analytics.js'; $localfile = '/web/web123/host/eure-seite.de/java/my-local-analytics.js'; $connTimeout = 10; $url = parse_url($remoteFile); $host = $url['host']; $path = isset($url['path']) ? $url['path'] : '/'; if (isset($url['query'])) { $path .= '?' . $url['query']; } $port = isset($url['port']) ? $url['port'] : '80'; $fp = @fsockopen($host, '80', $errno, $errstr, $connTimeout ); if(!$fp){ if(file_exists($localfile)){ readfile($localfile); } } else { $header = "GET $path HTTP/1.0\r\n"; $header .= "Host: $host\r\n"; $header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6\r\n"; $header .= "Accept: */*\r\n"; $header .= "Accept-Language: en-us,en;q=0.5\r\n"; $header .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"; $header .= "Keep-Alive: 300\r\n"; $header .= "Connection: keep-alive\r\n"; $header .= "Referer: http://$host\r\n\r\n"; fputs($fp, $header); $response = ''; while($line = fread($fp, 4096)){ $response .= $line; } fclose( $fp ); $pos = strpos($response, "\r\n\r\n"); $response = substr($response, $pos + 4); echo $response; if(!file_exists($localfile)){ fopen($localfile, 'w'); } if(is_writable($localfile)) { if($fp = fopen($localfile, 'w')){ fwrite($fp, $response); fclose($fp); } } }
Nun zum Schritt 4
Den absoluten Pfad der Datei bekommt Ihr am besten heraus, indem Ihr eine kleine php Datei, mit dem Namen: get_root.php und dem Inhalt „<?php echo $_SERVER[„DOCUMENT_ROOT“] ?>“ auf den Server ladet. Ruft Ihr diese nun auf „https://eure-seite.de/get_root.php“ zeigt der Browser euch den gesamten Pfad an.
Diesen absoluten Pfad tragt Ihr nun in die Datei „update-google.php“ (Zeile 3 ) ein.
Der Letzte und 5 schritt zum Browser-Caching
Damit die Datei auch in regelmäßigen Abständen ausgeführt wird, müsst Ihr euch am Server einen sogenannten Cronjob anlegen. Dies ist aber von Server zu Server verschieden.
Wie das bei einem Plesk Server geht könnt Ihr auf der Seite von kau-boys.de nachlesen.
Nächster Test bei Google Pagespeed Inside und Et voila!!
Das Browser-Caching der analytics.js wird nicht mehr bemängelt.