Ist es möglich, eine 301-Weiterleitung zu erzwingen, wenn jemand versucht, mit der alten /:id
-URL statt mit dem bevorzugten /:friendly_id
-Link zu einer Seite zu blättern?
Offenbar helfen solche Weiterleitungen Google zu sagen, dass Sie den Link aktualisiert haben , damit der alte nicht-freundliche Link nicht mehr angezeigt wird.
Mit der neuesten Version von friendly_id (5.0.3 zum Zeitpunkt der Erstellung dieser Antwort) und Rails 4 mache ich dies in der Steuerung:
%Vor% Hier ist eine Beschreibung der redirect_to
-Zeile, Stück für Stück zerlegt:
action: action_name
behält die Aktion bei, mit der du eine Verbindung herstellst (die angezeigt, bearbeitet, aktualisiert oder gelöscht werden kann, basierend auf dem before_action
, das vorhanden ist). Wenn du auf /items/1/edit
zugreifst, wirst du zu% weitergeleitet Code%
/items/pretty-url/edit
stellt sicher, dass die URL, an die Sie weitergeleitet werden, die hübsche URL id: @item.friendly_id
setzt die Weiterleitung auf den Status 301, für SEO status: 301
stellt sicher, dass wir keine Personen umleiten, die auf unless @item.friendly_id == params[:id]
über ihre hübsche URL zugreifen Routen
Ich glaube nicht, dass Ihre Routen hier das Problem sind
Das Problem ist die Backend-Behandlung der Route (I.E, ob es friendly_id
verwendet oder nicht). Alles, was Google sehen wird, ist dies:
Wenn beide Routen funktionieren, wird Google glücklich sein. Ich denke, Sie spielen auf die Idee an, dass Sie, wenn Sie die Routen so ändern, dass nur your_user
gehandhabt wird, Google dazu bringen müssen, die Weiterleitungen zu schätzen.
Weiterleitungen
Wenn Sie bedenken, dass Sie sowohl id
als auch slug
im Backend behandeln können (wir haben Code dafür, wenn Sie wollen), würde ich Redirects mit ActionDispatch::Routing::Redirection Klasse:
Während die Antwort von James Chevalier korrekt ist, können Sie diese Methode zum ApplicationController extrahieren, um sie mit jedem Modell zu verwenden, das FriendlyId verwendet:
%Vor% Wie Sie sehen können, ist es auch nicht notwendig, einen bestimmten action
Schlüssel an redirect_to
zu übergeben. Wenn Sie ein Rails-Modell an redirect_to
übergeben, wird automatisch versucht, auf die Aktion show
auf der zugehörigen Sammlungsressourcenroute zuzugreifen (vorausgesetzt, sie ist auf diese Weise eingerichtet). Das bedeutet auch, dass es nicht notwendig ist, einen Schlüssel id
zu übergeben, da FriendlyId immer den letzten Slug im #to_param
des Modells zurückgibt.
Ich bin kein großer Fan von unless
(verwirrende Semantik). Ich neige dazu, mich davor zu scheuen, aber das ist eher meine persönliche Vorliebe.
Ja, es ist möglich, dass Sie beide Routen auf Ihrem config/routes.rb
Dann müssen Sie in Ihrer Legacy-Methode action
ein
Dies erzeugt einen 301
Response-Code. Das wird schließlich Bots veranlassen, Ihr neues Muster zu treffen, ohne Ihren Traffic oder Ihre Indexierung (SEO) zu verlieren.
Tags und Links ruby-on-rails