Randshop - Mehrfache Bindestriche in der SEO-Url vermeiden

Die Routine zur Erzeugung der SEO-Urls produziert in bestimmten Situationen Urls mit doppelten (evt. mehrfachen) Bindestrichen. Das ist dann der Fall, wenn im Artikelnamen Leerzeichen drin sind, die werden zu Bindestrichen umgewandelt. Wenn nach dem Leerzeichen schon ein Bindestrich kommt, sind in der Url dann zwei Bindestriche direkt hintereinander.

Lösung:

In /includes/functions.seo.inc.php etwa in Zeile 3670 den Code durch die unten angegebenen Zeile(n) ergänzen.

$SEOName = str_replace('ä', 'ae', trim($Name));
$SEOName = str_replace('Ä', 'Ae', trim($SEOName));
$SEOName = str_replace('ü', 'ue', trim($SEOName));
$SEOName = str_replace('Ü', 'Ue', trim($SEOName));
$SEOName = str_replace('ö', 'oe', trim($SEOName));
$SEOName = str_replace('Ö', 'Oe', trim($SEOName));
$SEOName = str_replace('ß', 'ss', trim($SEOName));
$SEOName = str_replace(' ', '-', $SEOName);
$SEOName = str_replace('/', '', $SEOName);
$SEOName = str_replace('?', '', $SEOName);
$SEOName = str_replace('!', '', $SEOName);
    
//enfernt die doppelten Bindestriche:
$SEOName = str_replace('--', '-', $SEOName);

Funktioniert in den Versionen von 1.5 bis 2.0.1

Update: Jetzt die noch schönere Lösung:

Die bisher beschriebene Lösung funktioniert ja schon ganz gut. Allerdings werden nur genau zwei aufeinanderfolgende Bindestriche durch einen ersetzt. Manchmal ergeben sich aber sogar drei oder noch mehr bindestriche hintereinander.

Dafür habe ich jetzt eine richtig schöne Lösung gefunden:

Statt der oben beschriebenen neuen Zeile wird diese Zeile eingefügt:

$SEOName = preg_replace('/-{2,}/','-',$SEOName);

Damit werden nun 2 oder mehr direkt aufeinander folgende Bindestriche durch einen einzelnen ersetzt. Dabei bedeutet "oder mehr" wirklich beliebig viele.

Das Problem mit den doppelten Bindestrichen in der Url ist damit also wirklich gelöst!

Funktioniert in den randshop Versionen 1.5 bis 2.0.1

Hinweis für bestehende Shops:

Wird dieser Code in bestehende Shops eingebaut, greifen die Änderungen erst beim nächsten Speichern des Artikels oder der Kategorie.

Dabei wird im randshop dann auch gleich eine Umleitung für die alte Url (die mit den vielen Bindestrichen) auf die neue Url (die mit dem einzelnen Bindestrich) angelegt. Das ist im randshop schon sehr schön gelöst!

Aufpassen muss man nur auf den Zeitraum, nach dem die Umleitung gelöscht wird. Die standardmäßig eingestellten 3 Monate reichen locker z.B. für Google, die Suchmaschine hat das schon wahrscheinlich schon innerhalb weniger Tage erkannt und passt den Index an. Externe Links werden jedoch üblicherweise nicht so häufig aktualisiert, die bleiben eher unverändert stehen. Wenn man weiß, dass man mehrere solche Links bekommen hat, sollte man entweder den Zeitraum, nach dem die Umleitung gelöscht deutlich vergrößern oder man richtet sich in der .htaccess eine Weiterleitung für einzelne Links ein.

Hat die Anpassung bei Ihnen geklappt?

Wie immer, würde ich mich über einen Kommentar sehr freuen!

Übrigens wird Ihr angegebener Name mit einem follow-Link zu Ihrer angegebene Internet-Adresse hinterlegt. Sie können also hier schon ganz einfach einen Backlink auf Ihre Seite setzen!

Kommentar abgeben:

Kommentare:

Kommentar von bonsai |

Dazu habe ich noch eine Erweiterung. Ein Kunde von mir machte bei einem Artikel Ausrufezeichen (!!). Diese ! waren dann natürlich auch in der URL im ASCI enthalten.
Daraufhin habe ich vor das
$SEOName = str_replace(' ', '-', $SEOName);
folgendes gesetzt
$SEOName = str_replace('!', '-', $SEOName);

Das Vornedran ist wichtig, damit die ! erst in ein - (oder auch mehrere) und dann mit dem
$SEOName = preg_replace('/-{2,}/','-',$SEOName);
in eines zurückgesetzt werden.

Kann ich auch im Randshopforum veröffentlichen wenn gewünscht

Antwort von Magnus Geisler

Danke für den Tipp mit den Ausrufezeichen. Habs oben ergänzt.

viele Grüße

Magnus

Kommentar von bonsai |

Sorry aber ich muss noch etwas ändern. Mir ist dabei noch folgendes aufgefallen. Gibt der Kunde den Artikel als "Artikel !!!" mit einem Leerzeichen ein, wird in der URL nach dem Artikel ein - eingefügt. Sehr unschön. Daher gibt es eine Möglichkeit.
Das andere hier
$SEOName = str_replace('!', '', $SEOName);
kann sogar entfernt werden

Ein paar Zeilen unter unserer Änderung gibt es schon folgenden Eintrag der auskommentiert ist:
// $SEOName = str_replace("!", "", trim($SEOName));

Daraus habe ich jetzt 2 Einträge gemacht und zwar:
$SEOName = str_replace("-!", "", trim($SEOName));
$SEOName = str_replace("!", "", trim($SEOName));

Bei mir wird jetzt hinter dem Artikel nicht mehr das Leerzeichen als Artikel- angezeigt sondern da steht nur noch Artikel; wie es sich gehört.

Eventuell kann man das noch viel weiter ausbauen, je nachdem was die Kunden noch alles hinter dem Artikel eingeben

Antwort von Magnus Geisler

Hallo Bonsai,

vielen Dank für die Anregungen. Du hast schon recht, das könnte man wirklich noch perfekter machen. Andererseits war ja das "große" Problem dass mehrere Bindestriche hintereinander auftauchen konnten. Und das ist ja gelöst. von daher lasse ich das oben jetzt mal unverändert.

viele Grüße

Magnus