Das Putzlowitsch Test- und SEO-Blog

WildsauSeo-Rankings bei ranking-123.de als XML und JSON

Ein lachender WildsauSeo auf der Weide

Wie schon letztes Mal gibt es auch beim aktuellen SEO-Wettbewerb WildsauSeo die Ranking-Daten von ranking-123.de im XML- und JSON-Format.

Die URLs lauten:

Der Aufbau ist recht einfach und weitestgehend selbsterklärend. Im Kopf gibt es drei Datenfelder:

  • nam – Name bzw. Suchbegriff (z.B. WildsauSeo)
  • upd – Datum und Zeit des letzten Updates der Liste
  • cnt – Anzahl der Google-Suchergebnistreffer (nicht Listeneinträge!)

Es folgt in rnk eine Liste der Suchergebnisse mit folgenden Datenfeldern:

  • pos – Position in den Suchergebnissen
  • url – URL der Seite
  • typ – Typ des Suchergebnisses, mögliche Werte
    • txt – normales Suchergebnis
    • new – Google-News
    • img – Universal Search Bilder
    • vid – Video
    • rec – Rezept
  • img – URL des Bildes, wenn Typ img ist (optional)
  • aut – Name des Autors/Rezeptdaten, falls verfügbar (optional)
  • lpo – letzte Position, 1000 falls neu in der Liste

Bei der Position für Universal-Search Ergebnisse wird eine Unternummerierung vorgenommen. Das erste Ergebnis bekommt .01, das zweite .02, das dritte .03 usw. an die eigentliche Position angehängt. Befinden sich zum Beispiel vier Bilder an der Position 13, so erhalten sie die Positionen 13.01, 13.02, 13.03 und 13.04 in pos zugeordnet.

Die Daten werden stündlich zu vollen Stunde erhoben. Es dauert aber ein paar Minuten, bis sie dann tatsächlich vorliegen. Also sollten die Daten ein paar Minuten nach der vollen Stunde abgefragt werden. Den aktuellen Zeitpunkt der Daten sieht man ja in den Kopfdaten.

Das Top-10 Diagramm im PNG-Format liegt auch zu diesem Zeitpunkt vor. Es gibt ein 24-Stunden-Diagramm und ein 3-Wochen-Diagramm:

Leider liegen die Bilder nicht als https vor, so daß eine Einbindung in https-Seiten problematisch ist. Ich behelfe mir da derzeit mit einem kleinen lokalen „Proxy“, der die Bilder per PHP-Skript bei der Originalseite abholt und über eine „virtuelle“ lokale URL bereitstellt. Aber das ist ein Thema für sich… :-)

Keine Kommentare »

Alte PHP-Version 5.6 bei Strato jetzt auf PHP 7.2 umstellen

Freundliche Nachricht von Strato

Gestern erreichte mich eine E-Mail von meinem Webhoster Strato:

„Wichtig: Ihre PHP-Version ist veraltet
Seit Januar 2019 ist Ihre PHP-Version 5.6 veraltet und es stehen keine Sicherheitsupdates mehr zur Verfügung.
Wir lassen Sie nicht im Regen stehen! Bis zum 15.07.2019 führen unsere Entwickler kostenlos die Sicherheitsupdates für Ihre Websites fort.

Sie möchten weiterhin Ihre alte PHP-Version behalten?
Dann übernehmen wir die Aufgabe der PHP Community und führen weiterhin selbst die Sicherheitsupdates für PHP 5.6 durch. Bitte haben Sie Verständnis, dass hierdurch Wartungsaufwand entsteht, den wir ab dem 16.07.2019 mit 5,33 Euro pro Auftrag pro Monat in Rechnung stellen. Dies nennt sich PHP Extended Support. …“

Eigentlich hatte ich mein Webhostingpaket bei der STRATO AG schon auf PHP 7.2 umgestellt, dachte ich.

Alles eine Einstellungssache

Also habe ich mich schnell im Strato-Kundenmenü angemeldet und wurde gleich mit einem Popup-Fenster begrüßt.

Strato-Webhosting: Veraltete PHP-Version-Hinweis

Ja aber ich habe doch schon vor Wochen auf PHP 7.2 umgestellt. Also fix mal auf den Button [PHP-Versio ändern] geklickt und siehe da:

Strato-Webhosting: PHP-Version einstellen

Hab ich es doch gewußt:
„Sie verwenden zur Zeit folgende PHP-Version: PHP 7.2

Stimmt im Prinzip auch, nur weiter unten steht dann der entscheidende Hinweis:
„Achtung: Sie nutzen in mindestens einer .htaccess Datei auf Ihrem Webspace PHP 5.6/7.0.“

Also gammelt da in einem nicht mehr aktiven Projekt irgendwo noch eine .htaccess-Datei herum, in der ich eine PHP 5er Version aktiviert hatte. Nur welche das ist, sagt mir die freundliche Strato-Meldung nicht.

Suchen und Finden

Mit meinem Basiswissen Unix/Linux sollte das aber kein Problem sein, zumal es bei meinem Paket auch ein SSH-Login gibt.
Also einfach per SSH im Paket anmelden und mit „grep -r …“ den Übeltäter aufspüren. Denkste. Bei SunOS/Solaris, das auf den Webservern bei Strato läuft, gibt es kein rekursives grep.

Aber es gibt ja das Internet und so habe ich schnell die passende Kombination aus find und grep gefunden:

find . -type f -name ".htaccess" -exec grep -l "application/x-httpd-php5" {} +

Und tatsächlich habe ich drei .htaccess-Dateien mit einer alten PHP5-Konfiguration gefunden.

Strato-Webhosting: ssh

In zwei Fällen war die Zeile

# AddType application/x-httpd-php5 .php

auskommentiert, also nicht mehr aktiv. Nur beim Test-Projekt /neueseite/test/ war der Eintrag „aktiv“, allerdings war die Installation nicht mehr mit einer Domain/Subdomain verknüpft und somit nicht aufrufbar.

Die beiden Ordner /schnurpsel_29/ und /neueseite/test/ habe ich einfach komplett entsorgt und bei der Gelegenheit auch sonst noch ein wenig im Webspace aufgeräumt.

Das ist mit „rm -r …“ in NullKommaNix erledigt, viel schneller als beim rekursiven Löschen per FTP.
Allerdings sollt man sich sicher sein, was man tut, denn „rm -r“ haut ohne Nachfrage alles weg. Und weg ist weg. :-)

Ein Kommentar »

Weltfrauentag mit 13 Zitaten und ein paar JavaScript-Spielereien

Weltfrauentag 2019

Heute ist der 8. März und damit der Internationale Frauentag. In Berlin ist heute sogar ein richtiger Feiertag mit Arbeitsfrei, geschlossenen Geschäften und so.

Weltfrauentag 2019 (Google Doodle, de)

Bei Google gibt es wieder ein weltweites Doodle, diesmal eine Slideshow mit 13 Zitaten bekannter und berühmter Frauen.

Google schreibt dazu: „Lass dich am Weltfrauentag von starken Frauen inspirieren!“

Die grafisch gestalteten Texte links bleiben unverändert in der Sprache der Autorinnen, die Zitate rechts mit den Namen und Berufen der Autorinnen jedoch wurden übersetzt und werden in der Sprache des Betrachters angezeigt, für mich also z.B. auf deutsch.

Da man nun nicht ständig die Spracheinstellungen vom Browser oder Betriebssystem ändert, bekommt man die Zitate in den anderen Sprachen nicht zu sehen.

Deshalb habe ich mal ein paar Sprachen ausgewählt, für die ich in der folgenden Liste die Zitate anzeige. Beim Start wird die Sprache des Webbrowser verwendet, falls vorhanden (falls nicht, wird ‚en‘ genommen). Mit den kleinen Sprachlinks kann man aber die gewünschte Sprache auch manuell auswählen.

Das Ganze ist mit Daten im JSON-Format und ein wenig JavaScript realisiert, ganz sparsam ohne Javascript-Frameworks wie jQuery o. Ä.

Viel Spaß mit den Texten. :-)


  • “Wozu brauche ich Füße, wenn ich Flügel habe?”
    Frida Kahlo, Mexikanische Künstlerin
  • “Lass dich niemals von der beschränkten Vorstellungskraft anderer Leute einschränken.”
    Dr. Mae Jemison, Amerikanische Astronautin und Ärztin
  • “Mut bringt neuen Mut hervor.”
    Millicent Fawcett, Britische Schriftstellerin und Frauenrechtlerin
  • “Ein Traum, den man alleine träumt, ist nur ein Traum. Ein Traum, den man zusammen träumt, ist Wirklichkeit.”
    Yoko Ono, Japanische Multimediakünstlerin
  • “Wir sind zu wertvoll, um uns von Enttäuschungen ablenken zu lassen.”
    NL Beno Zephine, Indische Diplomatin
  • “Sag nicht, du seist schwach, weil du eine Frau bist.”
    Mary Kom, Indische Boxerin
  • “Ich glaube wirklich an die Idee der Zukunft.”
    Zaha Hadid, Britisch-irakische Architektin
  • “Flügel bedeuten nur Freiheit, wenn sie zum Flug gespreizt sind. Auf dem Rücken getragen sind sie eine Last.”
    Marina Zwetajewa, Russische Dichterin
  • “Laß durch nichts in der Welt dich binden als durch deine höchste innere Wahrheit.”
    Emma Herwegh, Deutsche Schriftstellerin
  • “Ich bin wichtig. Genauso wichtig wie ihr. Nicht 'nur wenn...', nicht 'nur solange...'. Ich bin wichtig. Punkt.”
    Chimamanda Adichie, Nigerianische Schriftstellerin
  • “Jeder, der auch nur einen Traum hat, hat einen Grund stark zu sein.”
    Sanmao, Taiwanesische Schriftstellerin, die in China geboren wurde
  • “Die Zukunft kann schöner werden als die Vergangenheit.”
    George Sand, Französische Schriftstellerin
  • “Ich bin stärker als ich selbst.”
    Clarice Lispector, Brasilianische Schriftstellerin
Keine Kommentare »

Black Hat Sith / White Hat Jedi – ganz ohne SEO

Black Hat Sith / White Hat Jedi – SEO-Wettbewerb

Der schwarze Hut

Es gibt mal wieder einen SEO-Wettbewerb, gewissermaßen um das Sommerloch zu füllen. Der Start war am 27. Juli und er läuft noch bis zum 31. August. Der Gesamtwert der Preise von 40000 Euro wirkt recht spektakulär und auch der Ablauf und die Wertung der Teilnehmer klingen durchaus innovativ, was einen SEO-Wettbewerb angeht.

So wird nicht nur an einem Stichtag zu einer bestimmten Zeit das Ranking bei Google herangezogen. Vielmehr gibt es an fünf Tagen vor Ende des Wettbewerbs jeweils um 19 Uhr eine Punktevergabe für die Rankings von Platz 1 bis 40. Hier zählen aber nur „Text-Suchergebnisse“, also keine Bilder, Videos, News usw. Wer dann in der Summe die meisten Punkte hat, hat gewonnen. Einfach, aber durchaus mal etwas Neues bei einem SEO-Contest.

Und noch etwas ist anders als sonst, es gibt zwei Suchbegriffe, auf die optimiert werden soll: Black Hat Sith und/oder White Hat Jedi

Ausgerufen hat den SEO-Wettbewerb die Website CineStock, Anbieter für lizenzfreie Cinemagraphs, Videos, Bilder und Musik. Cinemagraphs bzw. Cinemagramme sind laut Wikipedia Standbilder, die eine oft kleine, sich wiederholende Bewegung enthalten. Sie erscheinen dem Betrachter eher als Bild statt als ein kurzes Video.

Onpage-SEO, nie davon gehört!

Wenn man sich die Seite zum Wettbewerb bei cinestock ansieht, wird klar, warum sie einen SEO-Wettbewerb ausgerufen haben. Denn die Seite benötigt dringen etwas Onpage-Optimierung. Eine vernünftige, technische Optimierung der Webseiten selbst ist die Basis jeder SEO-Maßnahme. Da können Inhalte und externe Links noch so gut sein, wenn die Seite lahm daherkommt, sind die Besucher schnell wieder weg und auch Google wird nicht mit Top-Rankings winken.

Cinestock – Netzwerkanalyse

Insgesamt 227 Abfragen laden mal eben knapp 170 MB herunter. Das dauert dann auch mit meiner DSL-100 Anbindung stolze 18 Sekunden.

So werden die Logos der 36 Sponsoren und 26 Medienpartnern als einzelne JPEG-Bilder eingebunden.

Cinestock – Medienpartner Logos

Den Vogel schießt hier das 193×50 Pixel „große“ Logo von „SEO-Trainee“ ab, das als JPEG mal eben mit 650 kB zu Buche schlägt. Als PNG dürfte es etwa 10 kB groß sein.

Generell ist für Logos und Grafiken das PNG-Format besser geeignet und bei einer Vielzahl von kleinen Bildchen sollte man auch über Techniken wie CSS-Sprites oder Ähnliches nachdenken.

Aber gut, das PNG-Format kommt dann doch noch zum Einsatz. Allerdings hier nun für Bilder, die eher Foto-Charakter haben und für die daher besser das JPEG-Format geeignet ist.

Cinestock – Bilder (als PNG)

Am Ende der Seite findet man „Content für deine Seite“, eine Liste mit 20 Fotos der Größe 1920×1080 Pixel im PNG-Format und weiteren 35 Cinemagramme mit einer Breite von 650 Pixel als animierte GIF-Dateien. Gut, für die Cinemagramme ist wegen der Animation das GIF-Format die einzige Option. Aber für die Fotos wäre man mit JPEG-Bildern besser gefahren, das Bild „Black Hat Pokal 3“ ist als PNG über 3 MB groß, als JPEG dürfte es bei noch guter Qualität um 300 kB groß sein.

Aber unabhängig von der Eignung oder Nichteignung des Bildformates ist es keine gute Idee, 55 recht große Bilder auf einer Seite direkt als Bild in der Originalgröße einzubinden. Hier hätte es eine Galerie mit kleinen Vorschaubildern, die auf das Originalbild verlinken, auch getan.

Und was ist mit Facebook?

Allein 61 externe Requests gehen zum Facebook-CDN (fbcdn.net), davon 11 CSS, 29 JS und 15 mp4-Videos. Was für Videos eigentlich? Ganz oben am Anfang der Seite ist ein FB-Video als Erklärvideo eingebunden, aber was ist mit den 14 anderen?

Viele, externe Ressourcen sind der Seitengeschwindigkeit auch nicht gerade zuträglich.

SEO fängt mit Onpage an

Liebe Betreiber von CineStock, bevor Ihr einen SEO-Wettbewerb startet, solltet Ihr erst einmal die SEO-Hausaufgaben machen. Sonst verpuffen die positiven Effekte des Wettbewerbs ganz schnell unter der ächzenden Last einer lahmen Webseite!

3 Kommentare »

IP-Adresse bei Strato anonymisieren – so gehts

Strato Logfile anonymisiert

Strato-Logfile IP-Adresse anonymisiert

In den Server-Logdateien, die Strato seinen Webhosting-Kunden bereitstellt, werden die IP-Adressen schon seit vielen Jahren anonymisiert. Laut Hilfe/FAQ werden dazu die ersten 9 Bit der IP-Adresse in einen Hash-Wert umgewandelt. Aus der IP-Adresse 123.123.123.123 wird z.B. 123.123.122.243 (weitere Infos).

So weit, so gut, damit dürfte man, was personenbezogene Daten in den Log-Dateien angeht, auf der sicheren Seite sein. Durch die Anonymisierung geht der Personenbezug verloren.

Vollständige IP-Adresse in der Umgebung

Allerdings wird die nicht-anonyme IP-Adresse an alle Website-Applikationen wie z.B. WordPress durchgereicht und kann dort weiterverarbeitet und gespeichert werden. Man sieht das ganz gut auf einer PHP-Info-Seite:

Strato: IP-Adresse mit PHP-Info

Die vollständige IP-Adresse steht im Feld ‚REMOTE_ADDR‘ der globalen Arrays $_SERVER und $_ENV (Environment) zur Verfügung. Auch in anderen Programmiersprachen wie Perl, Python und per SSI (Server Side Includes) kann man darauf zugreifen.

Viele Web-Applikationen nutzen diese IP-Adresse für unterschiedliche Zwecke. In WordPress wird zu jedem Kommentar die IP-Adresse gespeichert, Statistik-Tools wie Piwik nutzen diese ebenso. Nun ist ja die IP-Adresse ein personenbezogenes/-beziehbares Datum und sollte daher nicht exzessiv genutzt und gespeichert werden.

Alles ganz anonym

Nun wäre es doch nicht schlecht, wenn man auch diese vom Webserver bereitgestellte IP-Adresse einfach anoymisieren könnte, ganz generell gewissermaßen auf der Systemebene.

Bei Strato geht das tatsächlich. Schon vor längere Zeit gab es nach der Einführung von „Speed Plus“ das Problem, das nicht mehr die tatsächliche IP-Adresse, sondern die eines Strato-Servers als Remoteadresse durchgereicht wurde. Die dort beschriebene Lösung für die .htaccess-Datei funktioniert prinzipiell immer noch. Nur muß ich jetzt nicht die IP-Adresse aus dem X-Forwarded-For extrahieren und der REMOTE_ADDR zuweisen, sondern die IP-Adresse verkürzen und mit Nullen auffüllen.

Mit dem Modul mod_setenvif hat man die Möglichkeit, Umgebungsvariablen abhängig von Umgebungsvariablen und Request-Feldern zu setzen. Genau das brauchen wir hier. Wir haben die Umgebungsvariable Remote_Addr und wollen diese verkürzt (anonymisiert) in die Umgebungsvariable REMOTE_ADDR setzen. Das Problem läßt sich mit ein bißchen Regular-Expression-Zauber in zwei Zeile in der .htacces erschlagen:

SetEnvIf Remote_Addr ^((\d+\.){3}) REMOTE_ADDR=$10
SetEnvIf Remote_Addr ^(([^:]+:){2}) REMOTE_ADDR=$1:

Zwei Zeilen sind deshalb erforderlich, weil IPv4- und IPv6-Adressen jeweils extra verarbeitet werden. Die Zahlen in den geschweiften Klammern geben an, wieviele Elemente der IP-Adresse erhalten werden sollen. Mit $1 wir der Rückbezug auf die erhalten gebliebenen Elemente hergestellt und die Zeichen danach wurden einfach hinzugefügt. In der ersten Zeile ist das also nicht nicht $10, sondern $1 und 0. Damit wird aus der IP-Adresse 217.245.43.45 dann 217.245.43.0.

Möchte man nur die ersten beiden Elemente der IPv4-Adresse erhalten, mußte die erste Zeile so aussehen:

SetEnvIf Remote_Addr ^((\d+\.){2}) REMOTE_ADDR=$10.0

Das 0.0 wird deshalb verwendet, damit die IP-Adresse „syntaktisch“ richtig erhalten bleibt. Aus 217.245.43.45 wird 217.245.0.0.

Optimalerweise steht die zwei Zeile ganz am Anfang einer .htaccess im Wurzelverzeichnis des Webpaketes. Dann wirkt sei auch auf alle Domains oder Subdomains, die ihr sichtbares Wurzelverzeichnis in einem Unterverzeichnis des Webspace haben.

Durchschlagener Erfolg

Damit wird die IP-Adresse nicht nur für PHP anonymisiert, sondern auch für andere Programmiersprachen. Zur Demonstration habe habe ich vier Beispiele vorbereitet, bei denen Ihr Eure aktuelle IP-Adresse sehen solltet, allerdings mit der letzten Stelle auf Null gesetzt:

Die Anonymisierung ist so durchschlagend, daß sogar die Error-Log-Daten, die Strato im Kundenbereich bereitstellt, nun anonymisiert sind:

Strato Error-Log: IP-Adresse anonymisiert

Und die normalen Server-Log-Files, die es im Strato-Kundenmenü gibt, sind nun sogar doppelt anonymisiert. Einmal ist die letzte Stelle genullt und dann greift noch die oben beschriebene Strato-Anonymisierung.

Anonymer geht es kaum noch. :-)

Keine Kommentare »