Die Tage machte mich Markus auf das Wordpress Problem mit der leeren Suche aufmerksam. Wer sein Suchfeld nicht mit einem Text vorbefüllt hat und einfach nur ohne etwas einzugeben auf Suche klickt, der kriegt inhaltlich das Ergebnis seiner Startseite geliefert, nur eben unter der URL domain.tld/?s= , also mit dem Anhang /?s= an seiner Domain. Da das Ganze wie die Startseite behandelt wird, ist diese leere Suche URL frei für die Suchmaschinen. Nach einigem Suchen im Netz ist mir aufgefallen, dass die Entwickler von Wordpress über diesen “Bug” Bescheid wissen, ihn aber von Version zu Version verschieben. Entsprechende Tickets dazu gibt es seit 13 bzw. 8 Monaten!
Wenn die Wordpress Entwickler uns schon so lange nicht bei diesem Double Content Problem unter die Arme greifen, dann müssen wir selbst für Abhilfe sorgen. Double Content auf der eigenen Domain, zumal es in den Paramtern in den Google Webmaster Tools auch definiert werden kann, halte ich zwar für nicht wirklich wild, aber trotzdem, schön ist so ein leere Suche Double Content auch nicht.
Nach längerem Suchen im Netz wurde ich schließlich fündig und habe in zwei Schritten meine Suchfunktion aufgebohrt: Der erste Schritt besteht darin, die leere Suche als Suche zu definieren. Bis dato wird sie nämlich nicht mal als Suche erkannt von Wordpress, sondern es wird einfach nur die Startseite unter einer anderen URL ausgegeben. Im zweiten Schritt leite ich die leere Suche dann auf die Startseite um. Damit ist alles wie gehabt, nur den Double Content gibt es nicht mehr, denn eine leere Suche landet dann, ebenfalls wie vorher, auf der Startseite und es wird, im Gegensatz zu vorher, die URL der Startseite ausgegeben. Dazu sind zwei Eingriffe in die Theme Dateien notwendig:
1. Leere Suche in der functions.php als Suche definieren
Da die leere Suche bis dato von Wordpress nicht als Suche definiert wird, müssen wir dies mithilfe einer Funktion in der functions.php des Wordpress Themes einrichten. Dazu habe ich folgenden Code im Wordpress Support Bereich gefunden:
//leere Suche
function blank_search($query){
global $wp_query;
if (isset($_GET['s']) && $_GET['s']==''){
$wp_query->set('s',' ');
$wp_query->is_search=true;
}
return $query;
}
add_action('pre_get_posts','blank_search');
2. Leere Suche auf die Startseite umleiten
Nun haben wir die leere Suche schon mal als Suche definiert und wollen sie noch auf die Startseite umleiten. Da bei einer leeren Suche sowieso nur der Inhalt der Startseite ausgegeben wird, aber unter einer anderen URL, sorgen wir mit dieser 301 Umleitung eigentlich nur dafür, dass auch die Startseite als URL ausgegeben wird. Dazu öffnen wir die header.php des Wordpress Themes und geben ganz oben folgenden Code ein:
<?php if (isset($_GET['s']) && $_GET['s']==''){
header("Location: /",TRUE,301); }
?>
Wer nun möchte, kann sein Suchformular selbst noch ein bisschen umgestalten, und es zum Beispiel mit ein paar Worten vorbelegen. Wie dies geht, wird sehr schön auf der Seite von Stefan beschrieben: Wordpress: Theme mit eigenem Suchformular.
Hmm das unter Punkt 2 reicht doch vollkommen aus, oder? Hab das grade mal getestet.
@Markus: Bei mir hatte es leider nicht gereicht, da funktionierte es gar nicht. Den ersten Punkt dazu und schon klappte es. Danach habe ich den auch nochmal weg gemacht und wieder das gleiche Ergebnis
Hmm komisch ich hab es jetzt so drin und klappt wunderbar.
Weil wenn Du dir das anschaust, in beiden Punkten wird ja geprüft:
if isset $_GET s …
Im ersten Punkt wird dann die leere Suche gesetzt auf die im 2. Punkt wo genau das selbe wieder geprüft wird, ja aber gar nicht zugegriffen wird.
@Markus: Frag mich mal warum das bei mir nur so rum funktioniert. Kein Peil… manchmal verstehe ich das nicht. Zur Not schiebe ich so was dann immer “auf den Server” *lacht*, denn logisch ist das mal wieder gar nicht
Hi Tanja,
danke für die verständliche Anleitung !
Ich würde sie gerne twittern, aber bemerke gerade, dass das gar nicht geht
…also schon funktionieren würde, aber Du gar keine Bookmarks dafür hast – hat das einen speziellen Grund ?
LG
Jasmina
Der Server lacht? Oh man, die haben ja doch schon recht komische Krankheiten. Meiner hatte Anfang des Monats mal starken Husten, jetzt wohl was ansteckendes.
@Jasmina: Aus mangelndem Klickverhalten hatte ich diese Buttons alle wieder entfernt. Für 1 bis 2x “click” pro Monat war mir die Last dann doch zu hoch.
@Sascha: Ja, die Server… haben schon echt seltsame Krankheiten
Aus meiner .htaccess:
RewriteCond %{QUERY_STRING} ^s=$
RewriteRule ^ /? [L,R=301]
Dann muß man nicht erst WordPress anwerfen …
@Thomas: Danke, so ist das auch eine gute Idee