Sidebar
ein-/ausblenden

WordPress Such-URL ändern

Plugin für WordPress SEO

Anzeige

WordPress sorgt dafür, wenn aktiviert, dass „schöne“ lesbare URLs genutzt werden. Lediglich die Suche ist davon bisher nicht betroffen; sie kommt mit der bekannten Syntax ?s im Standard aus. Aber auch hier kann man ansetzen und die URL seinen Bedürfnissen entsprechend anpassen.

Das folgenden Beispiel soll es verdeutlichen. Im Standard von WordPress, trotz aktiver Permalinks, sieht die URL zu den beiden Suchbegriffen wordpress und beratung wie folgt aus: bueltge.de/?s=wordpress+beratung&submit=Search. Mit Hilfe einer kleinen Funktion, die den Redirect anspricht, kann die URL angepasst werden. In meinem Fall, mit der zugehörigen nachfolgenden Funktion sieht die URL zu diesen beiden Suchbegriffen dann wie folgt aus: bueltge.de/search/wordpress+beratung.

Die Funktion, die ich einsetze, seht im folgenden Abschnitt. Innerhalb der WP-Funktion wp_redirct lege ich die Ausgabe fest, in dem ich den Begriff search zur home-url der Installation addiere und im Anschluss die Suchbegriffe ergänze. Dies kann man beliebig gestallten und je nach Anforderung so dass beste Ergebnis erziehlen.


function fb_change_search_url_rewrite() {
	if ( is_search() && ! empty( $_GET['s'] ) ) {
		wp_redirect( home_url( "/search/" ) . urlencode( get_query_var( 's' ) ) );
		exit();
	}	
}
add_action( 'template_redirect', 'fb_change_search_url_rewrite' );

Die Funktion legt man im besten Falle in einem Plugin ab oder alternativ in der functions.php des Themes. Schöne und verbesserte Lösungen sind wie immer willkommen und das Kommentarfeld steht dazu bereit.

Update
Aus den Kommentaren und Diskussionen ist ebenso eine Lösung entstanden, die explizit eine Lösung via Hook anspricht und so eine frei Benennung ohne Probleme zulässt; nicht desto trotz sollte man sich die Lösung via .htaccess überlegen.


function custom_search_url( $search_rewrite ) {

	if( ! is_array( $search_rewrite ) ) 
		return $search_rewrite;
	
	$new_array = array();
	foreach( $search_rewrite as $pattern => $s_query_string ) {
		$new_array[ str_replace( 'search/', 'my-search-url/', $pattern ) ] = $s_query_string;
	}
	$search_rewrite = $new_array;
	unset( $new_array );
	
	return $search_rewrite;
}
add_filter( 'search_rewrite_rules', 'custom_search_url' );

19 Kommentare zu „WordPress Such-URL ändern“

  1. 1
    Kommentar von Schnurpsel

    Ich habe seit Jahren das in der .htaccess stehen

    # Suche /s=xyz auf /search/xyz umleiten
    RewriteCond %{REQUEST_URI} ^/$
    RewriteCond %{QUERY_STRING} ^s=(.+)$
    RewriteRule .* /search/%1/? [R,L]

    Dürfte etwas schneller sein, weil nicht WordPress für die Weiterleitung bemüht werden muß.

  2. 2
    Kommentar von Michael

    Ob das eine gute Idee ist? Ich würde mir das 2 mal überlegen.
    1. Wenn man die Suche nirgendwo verlinkt, ist es egal. Suchmaschinen füllen (noch) keine Formulare aus und Google hat in den Webmaster Richtlinien auch so einen Abschnitt: "Google möchte keine Suchergebnisseiten crawlen".
    2. Wenn man verlinkt, verstößt man gegen die Richtlinie und erzeugt im schlimmsten Fall auch noch Duplicate Content ohne Ende. Daher müsste man /search/ in die robots.txt aufnehmen und damit ist wenigstens der SEO Effekt weg.
    Damit bleibt die Frage, warum ich das machen sollte?

  3. 3
    Kommentar von Frank Bültge

    @Michael: klar, solltest du die robots.txt anpassen; aber lesbare URLs sind nicht nur für Maschinen interessant, sondern ebenso für Menschen.
    @Schnurpsel; korrekt, geht ebenso und ist sicher schneller; wobei auch die htaccess jedes mal gelesen wird und jede Zeile mehr Zeit verursacht; die Funktion soll auch nur als Bsp. dienen; der Hook und die kleine Lösung stellen auch dar, was man mit dem redirect so anstellen kann und dass man ihn in WP super abfassen kann.

  4. 4
    Kommentar von Schnurpsel

    @Michael
    Doch, Google hat mal vor einiger Zeit eben genau das Suchformular ausgefüllt. Es gab dazu eine längere Diskussion im WPD-Forum:
    http://forum.wordpress-deutschland.org/netzwelten/29740-googlebot-erstellt-selbst-suchanfragen.html

  5. 5
    Kommentar von Guido

    Sorry, ich als Noob sehe da keinen großen Unterschied in den URL´s. Es sind doch die wichtigen Keys in beiden enthalten. Warum also solche Umstände machen?

  6. 6
    Kommentar von Ralf

    Ich bezweifele den Sinn allerdings auch ein wenig. Wenn der Nutzer einen Begriff in das Suchfeld eingegeben hat, dürfte ihn die URL nicht mehr so wahnsinnig interessieren. Und von Hand wird kaum jemand eine Suche in die Adresszeile eingeben.

    Interessanter fände ich da die Idee die Suchbegriffe im Cookie zu speichern und bei einem Aufruf der Suche dem Besucher anzuzeigen nach welchen Begriffen er bereits gesucht hatte.
    Um es dann wirklich komfortabel zu machen, könnte man bei einer Suche neben dem Artikel einen Link einblenden mit dem der Besucher den Artikel quasi als passend/unpassend markieren kann. Speichert man dies auch noch im Cookie, kann bei einer erneuten Suche gleich angezeigt werden welche Artikel bei der letzten Suche zu dem Suchbegriffen markiert wurden.

    Zumindest mir ergeht es häufiger so das ich etwas suche und dann zu den Suchbegriffen etliche Treffer angezeigt bekomme. Suche ich erneut nach den gleichen Begriffen, darf ich mich wieder durch die komplette Ergebnisliste wühlen um den passenden Artikel zu finden.

  7. 7
    Kommentar von Jonas

    Hm, ich glaube, ich verstehe auch nicht ganz, warum du die Such-URLs so anpassen willst - der Standard mag nicht ganz so flüssig sein, aber es ist klar erkennbar, was was in der URL ist, ergo lesbar für Menschen.
    Vielleicht kannst du näher erläutern, warum du das für sinnvoll empfindest? Eventuell überseh ich ja auch einfach was oder steh auf der Leitung.

  8. 8
    Kommentar von I. Wengel

    Danke! Kann man den Begriff "search" auch in suche ändern?

  9. 9
    Kommentar von Frank Bültge

    @I. Wengel: klar; schreib rein, was du magst; ist nur die Adresse nach dem Rewrite

  10. 10
    Kommentar von Frank Bültge

    @Ralf, @Jonas: doch, ich kenne Ansätze, wo man die URL nutzt um das Suchergebnis zu erziehlen und da kommt der Ansatz her. So kann es sein, dass wenn du von anderen System auf WP via Suche zugreifst, dass die URL schlüssig sein soll und einfach oder/und nicht direkt mit dem Standard-Syntax von WP zu erkennen. Die Funktion hier stellt nur da, was man simple realisieren kann; quasi wie so oft bei mir hier im Blog ein Grundgerüst mit dem man eigene Lösungen erstellt und eine Grundidee hat. Aber man glaubt nicht, was Kunden wollen; daher sollte man nicht aus eigenem Ansatz ran gehen, sondern die Lösung werten und prüfen, ob es für die eigene Person wertvoll ist.

  11. 11
    Kommentar von Dominik

    @I. Wengel und Frank:

    Nein, geht nicht so einfach. search ist in WordPress als Basis für die Suchpermalinks festgelegt. WordPress erkennt sonst nicht, dass es eine Suche ist.

    Um suche zu benutzen muss $wp_rewrite->search_base ebenfalls geändert werden.

    Habe da letztens einen Schnipsel veröffentlicht, ansatt pagination_base einfach search_base einsetzen.

  12. 12
    Kommentar von Frank Bültge

    @Dominik: danke dir, sehr schöne Ergänzung und Korrektur!

  13. 13
    Kommentar von Ralf

    @Frank:
    Wäre da nicht eine rewrite rule (WP oder htaccess) besser geeignet? Die Beschreibung zu "template_redirect" lautet ja "Loads the correct template based on the visitor's url".
    Deine Lösung ist in sofern nicht ganz propper, als das die Datei template-loader.php (enthält den Hook template_redirect) die Abfrage "is_search()" benutzt. is_search bastelt sich aus der URL die Antwort auf die Frage ob es eine Suche ist oder nicht. An dem Punkt könnte es durchaus mal kritisch werden sofern ein anderes Plugin anhand der neuen URL versucht festzustellen ob es sich um eine Such-Seite handelt oder nicht.

    Alternative müsstest du noch den Hook "parse_query" ansprechen und das Synonym für "s" ergänzen.

    $searchsynonym = 'suche';
    add_action('parse_query', 'fb_fb_change_search_url_parse_query');

    function fb_fb_change_search_url_parse_query ( $query ){
    global $wp_query;
    if( ! empty( $query->query_vars[$searchsynonym] ) )
    $wp_query->is_search = true;
    }

  14. 14
    Kommentar von Frank Bültge

    @Ralf: es def. ebenso eine spannende Lösung; bin mir aktuell nicht sicher, ob es besser oder nur anders ist. is_search() ist doch auch nur eine Funktion für $wp_query->is_search, inhaltlich gleich. Die Suche sollte man wohl eher über is_search abfangen, als die URL auszuwerten, aber sicher gibt es dann auch dafür wieder Gründe und nicht alles ist bedacht; wie so oft die untersch. Ideen der Kunden aufzeigen und man nach einer Beratung oft einsehen muss, dass es gebraucht wird.

    Sehr schön finde ich, dass hier eine kleine Diskussion entstanden ist. Dominik und Ralf sind auch sonst in meinem Fokus, aber nicht tagtäglich, wie einige anderen Kollegen. Endlich mal wieder Leben in den Kommentaren abseits von Support und Spam :)

    @Ralf @Dominik: wann macht ihr endlich Vollzeit bei uns mit? ;)

  15. 15
    Kommentar von Ralf

    Die Suche sollte man wohl eher über is_search abfangen

    Schau mal in query.php Zeile 1470. if ( !empty($qv['s']) ) { $this->is_search = true; }. $q ist ein Array welches die Query Vars (also quasi die $_POST & $_GET-Variablen) enthält.

    Der Hook template_redirect eignet sich eher dazu die Suche z.B. auf Google umzuleiten. Mit diesem Hook kann man WP davon abhalten die Standard-Templates zu laden.

  16. 16
    Kommentar von Holger

    Für die einfache Usability bzw User experience sehe ich jetzt auch nicht so den Vorteil der verbesserten Such URL. Ich hab aber vor ein kleines Longtail experiment zu starten, bei dem eben genau diese WP Suchseiten von Google indexiert werden sollen, auch wenn Serps in Serps wie erwähnt nicht im Sinne von Google sind..

  17. 17
    Kommentar von Torsten

    Auf WordPress.com-Blogs ist diese Such-URL übrigens auch standardmäßig eingerichtet. Da hier einige nach dem Sinn fragten: Auf WP.com kann man hinter das /search/[Suchbegriffe(e)] auch noch ein /feed/ setzen und sich so seinen eigenen Suchfeed erstellen. Praktisch wenn man nur ganz spezifische Artikel aus einem Blog lesen möchte.
    @Frank: Wie müsste man den Code denn erweitern, um das auch umzusetzen?

  18. 18
    Kommentar von Frank Bültge

    @Torsten: dies macht WordPress im Standard schon, so reicht eben bei aktiven Permalinks das Anhängen von feed um aus dem Suchergebnis einen Feed zu erstellen und sich informieren zu lassen, zum obigen Beispiel wäre das diese Feed-Adresse: bueltge.de/search/wordpress+beratung/feed Ergänzen kann man dies noch mit schlüsseln wie rss oder atom um spezielle Formate zu erstellen. bueltge.de/search/wordpress+beratung/feed/atom/

  19. 19
    Kommentar von Till | itanum

    Die Lösung von @Schnurpsel ist schnell und sauber. Feine Sache ... und Google freut sich über SERPS mit "sprechenden" URLs. Mal schauen ob die indiziert werden.

Kommentare sind geschlossen.