Post/Redirect/Get
Post/Redirect/Get (PRG) oder Redirect After Post (deutsch Umleitung nach dem Versand) ist ein Verhaltensmuster in der Entwicklung von Webanwendungen. Das Muster verhindert, dass Formulare durch den Anwender mehrfach gesendet werden.[1] PRG wird zudem in der Suchmaschinenoptimierung (SEO), insbesondere bei Filter-Navigationen in Online-Shops, eingesetzt[2].
Hintergrund
Wenn ein Webformular mittels der HTTP-Anfragemethode POST
übermittelt wird, kann es einige Zeit dauern, bis der Server auf die Anfrage reagiert. Wenn der Anwender ungeduldig ist und das Formular mittels eines GET
neu lädt, so kann das Formular mittels eines POST
erneut gesendet werden und dadurch einen unerwünschten Zustand verursachen.
Dauert beispielsweise der Bestellvorgang in einem Webshop zu lange, so könnte der Anwender ungeduldig werden, die Seite neu laden und den Bestellvorgang erneut versuchen. Hierdurch kann es zu einer ungewollten doppelten Bestellung kommen.
Funktionsweise
Um das Problem des doppelten POST
zu verhindern, wird der Benutzer beim Einleiten des Bestellvorgangs mittels des HTTP-Statuscode „303: See Other“ auf eine Seite umgeleitet, welche mittels der GET
-Methode auf die erfolgreiche Bearbeitung des POST
-Vorgangs wartet.
Lädt der Benutzer vor der Beendigung der Bearbeitung die Seite erneut, kommt er wieder auf die Warteseite und kann keinen erneuten POST
absetzen.
Einsatz in der Suchmaschinenoptimierung
Filter Navigationen in Online-Shops (häufig auch als Layered- oder Facettierte Navigation bezeichnet) erlauben dem Nutzer das Sortiment nach verschiedenen Produktmerkmalen wie Farbe, Größe, Material usw. zu filtern. Aus Sicht der Suchmaschinenoptimierung ist diese Funktion jedoch problematisch, da hierbei (Near-) Duplicate Content sowie nahezu unendliche viele zusätzliche URLs entstehen, was wiederum zu einer Verschwendung von Crawling-Budget führt.
Die PRG Methode ist ein Ansatz um diese SEO-Probleme im Zusammenhang mit Filter-Navigationen zu beheben[3] und ist dabei anderen im Bereich SEO üblichen Lösungsansätzen, die die Probleme nur unzureichend adressieren, überlegen[4]. Die PRG Methode wird jedoch von gängigen CMS und Online-Shop-Systemen in der Regel standardmäßig nicht unterstützt und muss individuell ergänzt werden (Beispiel-Implementierung für WordPress[5]).
Alternativen
Grundsätzlich besteht die Möglichkeit mit dem POST
eine Ressource mit einem eindeutigen Uniform Resource Identifier (URI) zu erstellen. Wird versucht die Ressource mit derselben URI erneut zu erstellen, so kann der Server den erneuten POST
, etwa mit dem Statuscode „405: Method Not Allowed“ oder „409: Conflict“, ablehnen.
Single-Page-Webanwendungen
In einer Single-Page-Webanwendung kann der „Submit“-Button deaktiviert werden, um ein erneutes Absetzen der POST
-Methode zu verhindern. Dieser Mechanismus reicht aber nicht aus, falls der Anwender die Seite erneut lädt. Es sollten daher vom Webentwickler zusätzliche Maßnahmen getroffen werden, um einen entsprechenden Fehler nach Möglichkeit zu verhindern.
Eine Alternative ist es, wenn der Benutzer die Möglichkeit bekommt, seine letzten Aktionen zu überprüfen und rückgängig zu machen. So kann beispielsweise ein Webshop nach erfolgter Bestellung auf die Liste der letzten Bestellungen umleiten, sodass der Benutzer eine Doppelbestellung sofort erkennt und den zweiten Bestellvorgang stornieren kann.
Quellen
- Ward Cunningham: Redirect After Post. In: Portland Pattern Repository. 12. September 2014, abgerufen am 7. Mai 2017 (englisch).
- Post-Redirect-Get. Abgerufen am 19. Mai 2018.
- POST, GET & PRG-Pattern, Faceted Navigation und der Einsatz im SEO. In: Catbird Seat - Agentur für Digitales Marketing. 11. Februar 2016 (catbirdseat.de [abgerufen am 19. Mai 2018]).
- l▷ SEO Optimierung für Layered Navigations mit PRG Pattern ✔ | JaJuMa-Blog. Abgerufen am 19. Mai 2018 (deutsch).
- Tobias Keller: PRG Pattern in WordPress implementieren. 26. August 2018, abgerufen am 28. August 2018 (deutsch).