Heute habe ich mir meinen Blog mal angeschaut, warum AMP trotz dem WordPress-Plugin nicht funktioniert. Das Ergebnis war, dass das Plugin „WP DoNotTrack“ Code einschleust, das nicht konform mit AMP arbeitet. Hier ist die Lösung dazu.
Inhaltsverzeichnis
Was ist das Plugin „WP DoNotTrack“?
Hier muss ich kurz etwas ausholen. Datenschutz ist etwas, was allen Europäern am Herzen liegt. Das betrifft unter anderem auch Trackingtools, weswegen wir auch Google Analytics nicht mit IP-bezogenen Daten verwenden dürfen und auch nicht sollten. Datenerhebung ja, aber nicht bis auf den einzelnen User exakt genau.
Deshalb hatte ich vor Jahren das Plugin „WP DoNotTrack“ installiert. WP DoNotTrack verhindert, dass exakte IP-bezogene Daten an US-amerikanische Auswertungsfirmen gelangen, wie etwa den extrem beliebten WordPress Plugin „Jetpack“.
Jetpack beinhaltet – heutzutage ganz selbstverständlich – das frühere Plugin „WordPress.com Stats“. Früher lieferte es ungefiltert das Besucherverhalten bis auf die IP-Adresse genau zu einer Firma in den USA. Da es die Rechte der Bürger in Europa und Deutschland im Bezug auf Datenschutz aber massiv beschneidet, konnte man sich eben WP DoNotTrack installieren, mit der man die letzte Stelle der IP-Adresse verschleiern konnte.
Ist Jetpack für WordPress sonst illegal?
Heutzutage: Nein. Mittlerweile wurde von der Europäischen Union eine Möglichkeit geschaffen, diese Verschleierung zu umgehen. Man muss dazu in seinen Datenschutzbestimmungen natürlich eine Notiz hinzufügen, dass eben Daten in die USA transferiert werden. Auf der Website des Rechtsanwalts Thomas Schwenke findet man dazu eine gute Vorlage im Generator, mit dem man den Text rechtssicher unterbringen kann. → Zum Generator (Aber: Weiterlesen!)
Plugin WP DoNotTrack ist völlig unnötig
Das heißt: Das WP DoNotTrack ist von seiner Bedeutung her nicht mehr aktuell. Es reicht eine Notiz in der Datenschutzerklärung. Zumindest nach den Informationen, die ich gefunden habe. Wie immer bei rechtlichen Fragen: Keine Rechtsberatung, auch hier nicht, aber jeder kann sich schlau machen.
Das Problem zwischen AMP & WP DoNotTrack
Im HTML: Wenn das Plugin WP DoNotTrack aktiviert ist, wird automatisch exakt bevor der </head> Tag erscheint – also der unsichtbare <head>-Bereich geschlossen wird – ein Skript eingebaut. Und ebenso wird exakt nachdem der <body> beginnt ein Script eingebaut. Diese Scripte sagen anscheinend, dass bestimmte Services ausgeschlossen werden sollen.
function aop_around(a,b){aop.around({target:a,method:b},function(a){if(typeof a.arguments[0].src==="string"&&(a.arguments[0].tagName.toLowerCase()==="script"||a.arguments[0].tagName.toLowerCase()==="img"||a.arguments[0].tagName.toLowerCase()==="iframe")&&a.arguments[0].src!=="javascript:void(0)"){if(sanitizer(a.arguments[0].src)===true){a.arguments[0].src="javascript:void(0)"}}return a.proceed()})}function sanitizer(a){var b=new RegExp("(?:f|ht)tp(?:s)?://([^/]+)","im");try{a=a.match(b)[1].toString()}catch(c){return a}if(mode==="blacklist"){for(x in list["black"]){if(typeof list["black"][x]==="string"){if(a.indexOf(list["black"][x].toLowerCase())!==-1){a=true;break}}}}else{for(x in list["white"]){if(typeof list["white"][x]==="string"){if(a.indexOf(list["white"][x].toLowerCase())!==-1){tmpS=false;break}else{tmpS=true}}}if(tmpS===true)a=tmpS}return a}(function(){var _after=1;var _afterThrow=2;var _afterFinally=3;var _before=4;var _around=5;var _intro=6;var _regexEnabled=true;var _arguments="arguments";var _undef="undefined";var getType=function(){var a=Object.prototype.toString,b={},c={1:"element",3:"textnode",9:"document",11:"fragment"},d="Arguments Array Boolean Date Document Element Error Fragment Function NodeList Null Number Object RegExp String TextNode Undefined Window".split(" ");for(var e=d.length;e--;){var f=d[e],g=window[f];if(g){try{b[a.call(new g)]=f.toLowerCase()}catch(h){}}}return function(d){return d==null&&(d===undefined?_undef:"null")||d.nodeType&&c[d.nodeType]||typeof d.length=="number"&&(d.callee&&_arguments||d.alert&&"window"||d.item&&"nodelist")||b[a.call(d)]}}();var isFunc=function(a){return getType(a)=="function"};var weaveOne=function(source,method,advice){var old=source[method];if(advice.type!=_intro&&!isFunc(old)){var oldObject=old;old=function(){var code=arguments.length>0?_arguments+"[0]":"";for(var i=1;i<arguments.length;i++){code+=","+_arguments+"["+i+"]"}return eval("oldObject("+code+");")}}var aspect;if(advice.type==_after||advice.type==_afterThrow||advice.type==_afterFinally)aspect=function(){var a,b=null;try{a=old.apply(this,arguments)}catch(c){b=c}if(advice.type==_after)if(b==null)a=advice.value.apply(this,[a,method]);else throw b;else if(advice.type==_afterThrow&&b!=null)a=advice.value.apply(this,[b,method]);else if(advice.type==_afterFinally)a=advice.value.apply(this,[a,b,method]);return a};else if(advice.type==_before)aspect=function(){advice.value.apply(this,[arguments,method]);return old.apply(this,arguments)};else if(advice.type==_intro)aspect=function(){return advice.value.apply(this,arguments)};else if(advice.type==_around){aspect=function(){var a={object:this,args:Array.prototype.slice.call(arguments)};return advice.value.apply(a.object,[{arguments:a.args,method:method,proceed:function(){return old.apply(a.object,a.args)}}])}}aspect.unweave=function(){source[method]=old;pointcut=source=aspect=old=null};source[method]=aspect;return aspect};var search=function(a,b,c){var d=[];for(var e in a){var f=null;try{f=a[e]}catch(g){}if(f!=null&&e.match(b.method)&&isFunc(f))d[d.length]={source:a,method:e,advice:c}}return d};var weave=function(a,b){var c=typeof a.target.prototype!=_undef?a.target.prototype:a.target;var d=[];if(b.type!=_intro&&typeof c[a.method]==_undef){var e=search(a.target,a,b);if(e.length==0)e=search(c,a,b);for(var f in e)d[d.length]=weaveOne(e[f].source,e[f].method,e[f].advice)}else{d[0]=weaveOne(c,a.method,b)}return _regexEnabled?d:d[0]};aop={after:function(a,b){return weave(a,{type:_after,value:b})},afterThrow:function(a,b){return weave(a,{type:_afterThrow,value:b})},afterFinally:function(a,b){return weave(a,{type:_afterFinally,value:b})},before:function(a,b){return weave(a,{type:_before,value:b})},around:function(a,b){return weave(a,{type:_around,value:b})},introduction:function(a,b){return weave(a,{type:_intro,value:b})},setup:function(a){_regexEnabled=a.regexMatch}}})();if(dnt_config.ifdnt!=="1"||navigator.doNotTrack==="yes"||navigator.msDoNotTrack==="1"||navigator.doNotTrack==="1"||document.cookie.indexOf("dont_track_me=1")!==-1||document.cookie.indexOf("civicAllowCookies=no")!==-1){var mode=dnt_config.mode;var list=[];list["black"]=dnt_config.black;list["white"]=dnt_config.white;aop.around({target:document,method:"write"},function(a){if(a.arguments[0].search(/img|script|iframe/i)!==-1){if(sanitizer(a.arguments[0])===true){a.arguments[0]=a.arguments[0].replace(/</g,"<!-- ").replace(/>/g," -->")}}return a.proceed()});scriptParent=document.getElementsByTagName("script")[0].parentNode;if(scriptParent.tagName.toLowerCase!=="head"){head=document.getElementsByTagName("head")[0];aop_around(head,"insertBefore");aop_around(head,"appendChild")}aop_around(scriptParent,"insertBefore");aop_around(scriptParent,"appendChild");var a2a_config=a2a_config||{};a2a_config.no_3p=1;var addthis_config={data_use_cookies:false};var _gaq=_gaq||[];_gaq.push(["_gat._anonymizeIp"])}
<script type="text/javascript">aop_around(document.body, 'appendChild'); aop_around(document.body, 'insertBefore'); </script>
Diese beiden Scripte durch das Plugin WP DoNotTrack sind aber nicht mit AMP kompatibel. Auch wenn das AMP-Tool versucht, die Scripte auszuklammern, so erreicht es doch nicht sein Ziel. Es wird also auf den AMP-Seiten ausgegeben, was nicht mit AMP kompatibel ist. Und deswegen können keine AMP-Ergebnisse zu deiner Website geliefert werden.
Lösung des Problems: Deaktivieren des Plugins „WP DoNotTrack“
Die bisher beste Lösung für den bundesdeutschen Markt lautet:
- Ergänze deine Datenschutzbestimmungen auf deiner Website. Wenn du das WordPress Plugin „Jetpack“ verwendest, kannst du dir die Vorlagen wunderbar im Datenschutzgenerator vom Rechtsanwalt Thomas Schwenke reinziehen.
- Deaktivieredas Plugin „WP DoNotTrack“
- Wenn du Caching-Plugins wie WP Super Cache verwendest, lösche den Cache.
- Benutze außerdem einen geeigneten Validator für deine Seite um zu prüfen, ob dann deine WordPress-Seite tatsächlich AMP-tauglich ist. Hilfen dazu findest du hier:
Soweit meine Ergebnisse. Habt ihr Fragen? Dann ab in die Comments damit. Ansonsten: Have fun. 🙂