it-swarm.com.de

Wie leite ich alle 404-Fehler eines bestimmten Beitragstyps zu einer anderen URL um?

Ich habe einen benutzerdefinierten Beitragstyp mit Stellenangeboten, der sehr volatil ist. Jobs werden häufig hinzugefügt und entfernt. Unsere Analysen zeigen, dass sich viele Crawling-Fehler auf Detailseiten von Jobs beziehen, die nicht aufgelistet wurden.

Die Lösung, die ich mir ausgedacht habe, besteht darin, alle Besuche für nicht vorhandene URLs innerhalb des CPT in die Joblistenübersicht umzuleiten, und ich möchte dies automatisieren.

Wie würde ich das machen? Ich suche nach einer Lösung, die dies sehr früh erledigt und so viele unnötige Anrufe wie möglich überspringt. (d. h. etwas früher als dies in header.php zu tun, idealerweise als Aktion)

Beispiel:

  • mydomain.com/jobs/existingjob/ liefert die Detailseite für den Job
  • mydomain.com/jobs/nojobhere/ existiert nicht und würde 404 werfen, wird aber stattdessen zu mydomain.com/jobs/ umgeleitet
2
lastfuture

Es sieht so aus, als ob template_redirect so weit oben in der WordPress-Aktionskette ist, wie Sie können, während Sie immer noch in der Lage sind, zu erkennen, dass ein 404-Fehler ausgelöst wird. Diese Aktion wird ausgelöst, bevor Vorlagendateien geladen werden. Dies geschieht also, bevor unnötige Ressourcen geladen werden.

Sie können versuchen, dies in Ihre /wp-content/themes/yourtheme/functions.php -Datei einzufügen, um eine dynamische Umleitung für alle 404-Dateien zu erzielen, die beim Anzeigen einzelner Jobs auftreten:

add_action( 'template_redirect', 'unlisted_jobs_redirect' );
function unlisted_jobs_redirect()
{
    // check if is a 404 error, and it's on your jobs custom post type
    if( is_404() && is_singular('your-job-custom-post-type') )
    {
        // then redirect to yourdomain.com/jobs/
        wp_redirect( home_url( '/jobs/' ) );
        exit();
    }
}
1
Ben HartLenn

Wenn es auf Ihrer Website keine Seite mit diesem Beitragstyp gibt, müssen Sie sich die Frage stellen: Soll ich diese Seite wirklich löschen? Oder soll ich es einfach besser machen? Wenn Sie sicherstellen möchten, dass Sie den richtigen HTTP-Header senden, gehen Sie wie folgt vor: Ein Header mit 410 gelöschten Inhalten.

404- und 410-HTTP-Header Der Unterschied zwischen einem 404- und einem 410-Header ist einfach: 404 bedeutet „Inhalt nicht gefunden“, 410 bedeutet „Inhalt gelöscht“ und ist daher spezifischer. Wenn eine URL den Wert 410 zurückgibt, ist Google weitaus sicherer, dass Sie die URL absichtlich entfernt haben, und sollte sie daher aus dem Index entfernen. Dies bedeutet, dass es viel schneller geht.

Sie können das Yoast SEO Premium-Plugin verwenden. Das Weiterleitungsmodul in diesem Plugin kann 410 Header bedienen.

0
Aishan

Ich habe nicht den Repräsentanten, der die Antwort von Ben HartLenn kommentiert, und ich weiß, dass dies ein alter Beitrag ist, aber um zukünftigen Benutzern Zeit zu sparen: is_singular ('post_type') funktioniert nicht auf einer 404-Seite. $ wp_query-> abgefragtes_Objekt funktioniert auch nicht.

Das funktioniert:

add_action( 'template_redirect', 'unlisted_jobs_redirect' );
function unlisted_jobs_redirect(){
    //check for 404
    if( is_404()){
        global $wp_query;
        //check that wp has figured out post_type from the request
        //and it's the type you're looking for
        if( isset($wp_query->query['post_type']) && $wp_query->query['post_type'] == 'your-job-custom-post-type' ){
        // then redirect to yourdomain.com/jobs/
        wp_redirect( home_url( '/jobs/' ) );
        exit();
    }
}
0
pilotfryer