Es ist ja ein wenig nervig. Wenn ich was lösche, oder wo 404 drauf zugegriffen wird, sollte es einen 410 auswerfen.
Mit Rank Math funktioniert das so:
Schritt 1: Einen 301 setzen statt 404. Jetzt wird Syno wieder maulen, denn es ist kein direkter 410. Aber es geht ja noch weiter.... und es funktioniert mit Bing und Google. Die Seiten werden entfernt, es ist allerdings 1 Hop mehr durch den 301. Klar.
Hier das Script für die geloescht.php, welche ihr in eurem Themen Ordner ablegt:
PHP
<?php
// Setzt den HTTP-Statuscode auf 410 Gone
status_header(410); // Nutzt die WordPress-Funktion, um den Header korrekt auf 410 zu setzen
// Lade den Header des Themes (inkl. Menü)
get_header();
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
?>
<div class="content-area" style="max-width: 800px; margin: 50px auto; padding: 20px; background-color: #f8f8f8; border: 1px solid #ddd; border-radius: 8px;">
<main class="site-main">
<section class="error-410 not-found">
<header class="page-header" style="margin-bottom: 20px;">
<h1 class="page-title" style="font-size: 2em; text-align: center; color: #333;">Seite nicht mehr verfügbar</h1>
</header>
<div class="page-content" style="font-size: 1.1em; line-height: 1.6;">
<p>Die angeforderte Seite ist nicht mehr verfügbar und wurde dauerhaft entfernt. Vielleicht finden Sie, wonach Sie suchen, über unsere Navigation oder die Suche unten:</p>
<!-- WordPress-Suchformular einfügen -->
<?php get_search_form(); ?>
<!-- Link zur Startseite -->
<p style="margin-top: 20px;"><a href="<?php echo esc_url(home_url('/')); ?>" style="color: #0073aa; text-decoration: none;">Zurück zur Startseite</a></p>
</div>
</section>
</main>
</div>
<?php
// Lade den Footer des Themes
get_footer();
?>
Alles anzeigen
Jetzt gibt er schonmal einen 410 aus, was wir noch machen müssen, den letzten Schritt: auf /geloescht/ umleiten, bzw verfügbar machen:
In die Functions.php folgendes rein:
PHP
<?php
add_action('init', function() {
add_rewrite_rule('^geloescht/?$', 'index.php?geloescht=1', 'top');
});
add_filter('query_vars', function($vars) {
$vars[] = 'geloescht';
return $vars;
});
add_action('template_redirect', function() {
if (get_query_var('geloescht') == 1) {
// Setzt den HTTP-Statuscode auf 410, bevor das Template geladen wird
status_header(410);
// Bindet das geloescht.php-Template ein
include(get_template_directory() . '/geloescht.php');
exit;
}
});
?>
Alles anzeigen
und schon sieht das so aus:
und sendet einen sauberen 410, statt 404.