Quantcast
Channel: Gebastel – Webrocker
Viewing all articles
Browse latest Browse all 13

WordPress sitemap.xml trimmen

$
0
0

Oha, da habe ich gerade nicht schlecht gestaunt. Die seit WordPress 5.5 automatisch erstellte und unter /sitemap.xml erreichbare Sitemap für "Inhalt besser für Suchmaschinen sichtbar machen" listet unter anderem auch die Autoren Seiten auf und "verrät" dabei so nebenher die Usernamen, weil die in der URL stehen.

Screenshot Sitemap mit u.a. User Archiv

Das ist nun, ähm, ein wenig doof, wenn man ja eigentlich nicht möchte, dass eine sich als potentiell angreifende Person definierende Person schon mal ein Teil des Login-Puzzles präsentiert bekommt.

Genauso wenig war ich erfreut, dass dort in der sitemap.xml unter wp-sitemap-posts-page-1.xml auch ungefragt meine diversen Testseiten auftauchen, und sämtliche Kategorie- und Tag- Archivseiten. Also die der einzelnen Taxonomie-Begriffe - immerhin fast 5000 Seiten hier im Blog.

Ja nun, das soll hier nicht so bleiben. Ich habe aber auch keine Lust, mir da ein Sitemap- oder SEO Plugin zu installieren. Ausserdem bin ich der Meinung, dass, wenn WordPress schon der Meinung ist, dass das mit der Sitemap out of the box eine gute Idee ist, man eigentlich auch eine Konfiguration, was die enthalten soll, anbieten müsste. Oder als Standard meinetwegen die Post- und Pages dafür nehmen und Taxonomie und User nur auf expliziten Wunsch.

Natürlich gibt es auch für die Sitemap Hooks und Filter in der WordPress API, und so kann man mit ein paar Zeilen Code in der functions.php des Themes oder in einem Plugin die Gesprächigkeit der Sitemap eindämmen.

Hier der Code, um z.B. "User" und "Taxonomies" raus zu nehmen:

function remove_sections_from_sitemap($provider, $name) {
    $sections = ['users','taxonomies'];
    if ( in_array( $name, $sections ) ) {
        return false;
    }
    return $provider;
}

add_filter('wp_sitemaps_add_provider', 'remove_sections_from_sitemap', 10, 2);

Der Code, um einzelne Posts oder wie hier Seiten raus zu nehmen, ist etwas komplizierter:

// Remove specific pages
function disable_sitemap_specific_page($args, $post_type) {
	if ('page' !== $post_type) return $args;
	$args['post__not_in'] = isset($args['post__not_in']) ? $args['post__not_in'] : [];
	$args['post__not_in'][] = 123; //page with id 123 will be removed from sitemap
	$args['post__not_in'][] = 456; //
	$args['post__not_in'][] = 789; //
	return $args;
}
add_filter('wp_sitemaps_posts_query_args', 'disable_sitemap_specific_page', 10, 2);

Damit ist meine sitemap nun nur auf Posts und Pages reduziert, und ich kann einzelne Seiten rausnehmen.

Screeenshot reduzierte Sitemap


Viewing all articles
Browse latest Browse all 13