Ehrlich gesagt kriege ich immer richtig gehend die Krise, wenn ich sehe, dass ein Plugin sich mal wieder in meinem HTML Header austobt und mir Zeilenweise Codes da rein bastelt, die den HTML Header unnötig aufblähen. In den meisten Fällen sind das Plugins die ihre Ajax und Javascript Anweisungen dort auflisten. Sicher sind diese Anweisungen notwendig, damit die Plugins laufen können, doch haben sie meines Erachtens nichts im HTML Header zu suchen.
Mit dieser Version der Funktionsaufrufe von Plugins im HTML Header werden sämtliche Funktionen komplett geladen, bevor überhaupt irgendetwas auf der Seite selbst geladen wird. Dabei ist es in den meisten Fällen komplett „Banane“ wo die Funktionsaufrufe stehen. Sie können genauso gut im Footer aufgerufen werden.
Dem einzigen Plugin, dem ich es bis dato gestattet habe, seine Funktionsaufrufe in den HTML Header zu schreiben, ist das Blogintroduction Plugin von Kim. Kim war es auch, der mir bei meiner Lösungssuche diesbezüglich geholfen hat – Vielen Dank Kim noch mal an dieser Stelle! – denn es ist nicht nur eine Schönheitskorrektur.
Meine Gedankengänge sind diesbezüglich viel mehr SEO lastig. Wir SEOs sind darum bemüht, den eigentlichen Content so weit oben wie möglich zu starten, um dadurch bessere Rankings zu erhalten. Je weiter unten der Content startet, desto schlechter sind meist die Suchmaschinenergebnisse. Wenn ich mir diesbezüglich den Quelltext mancher Blog-Kollegen ansehe, kommt mir schlicht und ergreifend das kalte Grausen. Nicht selten sind haufenweise Zeilen im HTML Header zu finden, wovon nicht wirklich vieles auch definitiv in den HTML Header gehört (wie z.B. die ganzen Meta Tags). Bis sich eine Suchmaschine dort durchwühlt und beim Content landet, kann das schon eine ganze Weile dauern. Warum es den Suchmaschinen so schwer machen und deswegen vielleicht sogar wertvolle Rankingplätze verschenken?
Plugins, die sich im HTML Header verausgaben nutzen dazu den Wordpress eigenen Hook wp_head() der in der header.php aufgerufen wird. Anstatt sie in den wp_head schreiben zu lassen, kann man sie genauso gut im wp_footer() verewigen lassen, der in die footer.php des Themes gehört. Dazu einfach die entsprechende Plugin php aufrufen, nach dem Funktionsstart mit dem wp_head suchen und das wp_head mit wp_footer ersetzen, abspeichern, hochladen und testen. Dass dazu der Aufruf des wp_footer in der footer.php vor dem </body> vorhanden sein muss – <?php wp_footer(); ?> ist Voraussetzung. Mit Kims Plugin läuft das alles hervorragend.
Wenn Ihr diese Änderungen vornehmt, müsst Ihr nur aufpassen, was ihr statt in den wp_head in den wp_footer schreibt. Javascript kann definitiv im Footer ausgeführt werden. Meta Tags oder CSS Links sollten aber im wp_head stehen bleiben. Für mehrere CSS gibt es noch eine weitere Lösung, die ich mir bei Bedarf demnächst ansehen werde.
Kim meint übrigens, dass man mit dem wp_footer() vorsichtig sein muss, da es Plugins gibt, die dort gerne den ein oder anderen versteckten Werbungslink hinterlassen. Also bitte immer den Quelltext überprüfen, was Eure verwendeten Plugins in den Wordpress Hooks so alles anstellen
Grundsätzlich wäre ich dafür, dass jeder Plugin Autor, der Codes in den wp_head einfügt, die auch wo anders stehen können, eine wählbare Einstellungsmöglichkeit zur Verfügung stellt, mit der der Blogbetreiber entscheiden kann, ob er den Plugin Code in der wp_head oder im wp_footer stehen haben möchte. Wie seht Ihr das?
Und weil wir schon mal beim Thema sind: In meinen Augen geht es auch niemanden etwas an, welche Plugins ich nutze (in meinem Quelltext werdet ihr davon nur wenig finden). Jedes Plugin, das sich im wp_head verewigt prüfe ich manuell auf die <!-- Kommentarzeilen und kommentiere die dementsprechenden PHP Anweisungen die Plugin Name und oft auch Version im Quelltext ausgeben einfach aus (vor dem entsprechenden PHP Code, der meist ein echo Befehl ist einfach zwei // setzen, also // echo …).
Es gibt aber noch ein paar weitere Angaben, die ich aus meinem HTML Header entfernt habe, die von Wordpress automatisch dort reingesetzt werden. Vor allem geht es hier um die im Blog verwendete Wordpress Version, die ja wohl überhaupt niemandem in meinem Quellcode etwas angeht. Da ich auch den Windows Livewriter nicht nutze, sind auch die beiden diesbezüglichen Links rausgeflogen. Diesbezüglich habe ich einfach nur den <?php wp_head(); ?> Code in meiner header.php mit diesem ersetzt:
<?php
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'rsd_link');
wp_head();
?>
Wer nur die Versionsangabe unterbinden möchte, braucht nur folgenden Code:
<?php
remove_action('wp_head', 'wp_generator');
wp_head();
?>
[...] der Javaskript Dateien im Header. Teilweise können diese aber auch im Footer geladen werden. Tanja hat dazu ein guten Beitrag [...]
Vielen Dank für diesen wirklich sehr aufschlussreichen Beitrag
Doch nicht nur unter SEO-technischen Gesichtspunkten, sondern auch was die Performance der Seite beim Laden angeht, ist eine Platzierung von JavaScript-Codes am Seitenende vorteilhaft, denn:
Die Skripte werden größtenteils sowieso nur benötigt, um Aktionen durchzuführen, die erst sinnig sind, wenn der Content auch komplett geladen wurde. Lädt man die (teilweise recht mächtigen Skripte) zum Schluss der Seite, hat das den Vorteil, dass der Leser die Seite bereits lesen kann und den Inhalt zu Gesicht bekommt, bevor die ganzen Zusatzfeatures per Javascript geladen werden und aktiv werden. Also wieder ein Vorteil auch für den Leser der Seite!
@Kim: Ich hab es tatsächlich vergessen das Performance Argument anzuführen
Aber so gut wie Du hätte ich das im Leben nicht ausführen können. Danke!
Klasse Tipps. Muss schon sagen. Werde es mal versuchen, kann mir aber nicht unbedingt vorstellen, dass es SEO technisch viel bringt!!
SEO technisch bringt das nur was für den, der vorher viel im Head drin stehen hatte. Ich hatte hier von hausaus nicht viel (aus diesem Grund auch manche Plugins gar nicht richtig online gehen lassen) im Head und deswegen wird es mir nicht gerade viel Ranking Verbesserungen bringen. Ich habe aber definitiv schon Seiten im Ranking klettern sehen, bei denen der Content einfach weiter nach oben geschoben wurde

Aber selbst wem SEO und Ranking egal ist, die Performance dürfte das beste Argument sein
Die beiden letzten Tipps (keine Plugin Namen, Versionen sowie die Wordpress Version etc.) sind einfach nur Sicherheits- und Schönheitsupdates. Geht einfach niemanden was an
Einmal wieder ein klasse Artikel, ich werde – wenn ich mal wieder Zeit haben – meinen Header durchsuchen und schlanker machen
Danke Daniel
Aus SEO Gesichtspunkten macht ein schlanker Header richtig Sinn. Bis vor einem Jahr war Verlinkung einer der stärksten Rankinggewichtungspunkte – davor war es auch wichtig auf seinen Seitenaufbau zu achten nur rückte das immer weiter in den Hintergrund. Nun scheint Google wieder zurück zur old-school things gefunden zu haben. Die Optimierung auf einer Seite wird wieder wichtiger. Das kann man z.B. schön daran sehen, dass die Gewichtung von Ladezeiten in den Algo offiziell bestätigt wurde. Jeder der größere Probs mit seinen Suchmaschinenpositionen hat, sollte mal nachsehen, ob sein Quellcode nicht verbesserungswürdig ist und v.a. Inhalte gehören nach oben im Quellcode.
@Maik: Danke für die Unterstützung
Du hast also in der header.php entfernt, und stattdessen
hingeschrieben?
Aber wenn man in der header.php diese Angaben überhaupt nicht drinstehen hat, und auch den Code entfernt hat, braucht man doch die remove-Teile überhaupt nicht? Oder hab ich da gerade am Thema vorbei gedacht?
Ich hab das bei mir so geregelt, dass ich zwar den Code im Header habe (wird von einigen Plugins benötigt), die remove_action-Dinger habe ich aber in die functions.php gesteckt.
@alte Kiehvoz: Ich habe das in der header.php selbst geändert, also nicht in die functions.php oder wo auch sonst hingeschrieben (meine letzte Änderung aus dem Beitrag).
Die ersten und zweiten Änderungen aus meinem Beitrag muss man direkt in den Plugin Dateien durchführen und natürlich den wp_footer() in der footer.php drin haben.
Wenn Du den code wp_head() in der header.php entfernst, dann kann gar kein Plugin mehr dort reinschreiben und damit funktionieren einige Plugins nicht mehr. Was dort definitiv reingehört sind die Angaben, die z.B. die ganzen SEO Plugins wie robots-meta, all-in-one-Seo oder wie sie sonst noch so heißen machen. Die fügen ja in erster Linie meta tags hinzu und die müssen im head-Bereich bleiben. Auch alle CSS Dateien sollten im head bleiben. Was aber defintiv dort raus kann sind die ganzen Javascripts, die von einigen Plugins so produziert werden. Die können super genial im Footer stehen, und damit dann auch die Performance der Seite verbessern.
Das Problem ist ja auch noch ein vielfaches:
Klar, wenn ich wirklich schreibend auf wp_head zugreife, hätte ich es auch besser machen können.
WordPress bietet aber auch noch die Möglichkeit mit wp_print_script Javascripts auszugeben, was den Vorteil bietet, dass man z.B. Bibliotheken wie jquery damit ausgeben kann, ohne gefahr zu laufen, dass ein zweites Plugin das auch nochmal einbindet (natürlich nur, wenn sich jeder dran hällt) -> aber die landen dann afaik auch im Header.
Soll heißen, was auf der einen Seite wirklich gut und freundlich gemeint ist, schadet auf der anderen Seite…
@John Doe: Wegen dem wp_print_script möchte ich Ajax Edit Comments hier nicht einbinden. Oder hast Du vielleicht eine Idee, wie man diese Funktion in den Footer packen kann?
Folgenden Code finde ich ab Zeile 41:
//JavaScript
add_action('admin_print_scripts', array(&$this,'add_post_scripts'),1000);
add_action('wp_print_scripts', array(&$this,'add_post_scripts'),1000);
add_action('wp_head', array(&$this, 'add_script_vars'), 1001);
add_action('admin_head', array(&$this,"add_script_vars"), 1001);
Zeile 1 und 4 stören mich nicht weiter im Admin Bereich, Zeile 3 kann ich auf den Footer ändern, aber wie bekomme ich Zeile 2 aus dem Header raus? Irgendeine Idee?
Schön, das hilft doch weiter! Aber: Wenn ich nun in den betreffenden plugins den Code so ändere das die Javascripts im Footer landen ist bei einem update der plugins alle wieder beim alten. Es müsste doch möglich sein eine Funktion? in der functions.php zu hinterlegen, die alle Einträge Javascripts betreffend automatisch in die Funktion wp_footer schiebt. Oder bin ich nun zu optimistisch?
@Luigi: Ja richtig, Du müsstest das bei jedem Plugin Update “nacharbeiten”. Alternativ kannst Du die entsprechenden Plugin Autoren bitten, es in ihre Plugins mit aufzunehmen.
Eine allgemeine Funktion dafür dürfte schwierig bis unmöglich sein. Du könntest aber versuchen für das jeweilige Plugin eine eigene Funktion anzulegen und mit enem remove aus dem header und anschließendem add in den Footer arbeiten. Ob und wie das geht… ehrlich gesagt keine Ahnung, ich kann es auch nicht ausprobieren, da ich gar keine solchen Plugins mehr aktiv habe.
Die Alternative für die ich mich im Laufe der Zeit entschieden habe ist entweder der komplette Wegfall solcher Plugins oder der Ersatz mit Funktionen oder anderen Plugins, die “sauberer” arbeiten diesebezüglich bzw. auf Javascript verzichten.