← Ratgeber

WooCommerce-Filterseiten für Google: gezielt Landingpages statt tausender Filteradressen

Stand: 20. Oktober 2026

Ein Kunde sucht nicht nach „Sofas“, sondern nach „graue Samtsofas“. Ihr Shop hat diese Seite längst: die Kategorie Sofas, mit dem Farbfilter auf Grau und dem Materialfilter auf Samt. Für Google ist sie aber nur eine von tausenden Filteradressen wie /produktkategorie/sofas/?filter_farbe=grau&filter_material=samt. Sie trägt die Überschrift und den Text der Kategorie, und die meisten SEO-Plugins setzen ein Canonical zurück auf die ungefilterte Kategorie. Ranken kann sie so nicht.

Gleichzeitig erzeugt jeder Filter neue Adressen: jede Farbe mit jedem Material, jede Reihenfolge, mit und ohne query_type. Dieser Artikel zeigt, was Google zu solchen Filterseiten (der „facettierten Navigation“) sagt, wie Sie einzelne Kombinationen zu echten Landingpages machen, mit ein paar Zeilen Code oder mit einem Plugin, und wie Sie den Rest von den Crawlern fernhalten.

Was Google zu Filterseiten sagt

Google beschreibt Filterseiten in einem eigenen Leitfaden, auf Englisch unter „faceted navigation“. Die Kernaussage: Filter auf Basis von URL-Parametern können „unendliche URL-Räume“ erzeugen, und das schadet auf zwei Arten, durch Übercrawling und durch langsameres Entdecken neuer Inhalte (Google: Managing crawling of faceted navigation URLs). In einem Blogbeitrag von Dezember 2024 nennt Google die facettierte Navigation „bei Weitem die häufigste Ursache für Übercrawling, die Websitebetreiber uns melden“ (Crawling December: Faceted navigation).

Google nennt zwei Wege:

  1. Filteradressen sperren, wenn sie nicht in den Index sollen. Der erste Weg dafür ist die robots.txt.
  2. Filteradressen gezielt optimieren, wenn sie gefunden werden sollen.

Beides lässt sich kombinieren: alle Filteradressen sperren, bis auf die wenigen, die Kunden wirklich suchen. Googles eigenes Beispiel sieht genau so aus:

user-agent: Googlebot
disallow: /*?*products=
disallow: /*?*color=
disallow: /*?*size=
allow: /*?products=all$

Das $ am Ende bedeutet „hier endet die Adresse“. Bei mehreren passenden Regeln gilt die spezifischste, gemessen an der Länge des Pfads; bei gleicher Länge die weniger einschränkende (robots.txt-Spezifikation). Eine Allow-Zeile mit der vollständigen Adresse einer Landingpage schlägt also das allgemeine Disallow, und nur für genau diese Adresse.

Zwei Grenzen sollten Sie kennen. Die robots.txt verhindert das Crawlen, nicht die Indexierung: Google kann gesperrte Adressen trotzdem ohne Inhalt in den Index aufnehmen, und die robots.txt ist kein Werkzeug für Canonicals (Google: Kanonisierung). Und für die Seiten, die in den Index sollen, empfiehlt Google ein Canonical auf die Seite selbst.

Was eine Filter-Landingpage braucht

Ein Punkt betrifft nur Shops mit dem Block „Produktfilter“: Er tauscht standardmäßig nur die Produktliste aus, ohne die Seite neu zu laden. Ein Kunde, der auf „Grau“ klickt, sieht dann weiterhin die Überschrift der Kategorie. WooCommerce hat dafür im umgebenden Block der Produktliste (Product Collection) die Einstellung „Reload full page“; dann lädt jeder Filterklick die ganze Seite neu (WooCommerce-Dokumentation).

Weg 1: ein paar Zeilen Code

Für eine Handvoll Seiten in einem klassischen Theme mit Yoast SEO reicht Code in einem eigenen kleinen Plugin oder in der functions.php eines Child-Themes. Er erkennt die Kombination in jeder Reihenfolge und mit oder ohne query_type, lässt Preis- und Sortierfilter in Ruhe und setzt Überschrift, Text, Titel, Beschreibung, Canonical und index, follow:

<?php
/**
 * Filterkombinationen als Landingpages, ohne Plugin: klassisches Theme, WooCommerce-Filter,
 * Yoast SEO. In ein eigenes Plugin oder die functions.php eines Child-Themes.
 */

function meinshop_landingpages() {
	return array(
		// Kategorie-Slug | Filter, alphabetisch, Werte durch Komma getrennt.
		'sofas|farbe=grau' => array(
			'h1'           => 'Graue Sofas',
			'titel'        => 'Graue Sofas in Samt, Leinen und Wolle',
			'beschreibung' => 'Graue Sofas in Samt, Leinen und Wolle, vom Zweisitzer bis zum Ecksofa.',
			'text'         => '<p>Grau passt zu fast jedem Boden und jeder Wandfarbe.</p>',
		),
	);
}

/**
 * Die Landingpage der aktuellen Seite, oder null.
 */
function meinshop_landingpage() {
	static $seite = false;

	if ( false !== $seite ) {
		return $seite;
	}

	$seite = null;

	if ( ! is_product_category() || is_paged() ) {
		return $seite;
	}

	$filter = array();

	foreach ( $_GET as $name => $wert ) { // phpcs:ignore WordPress.Security.NonceVerification
		if ( 0 === strpos( $name, 'filter_' ) && is_string( $wert ) ) {
			$werte = array_unique( array_map( 'sanitize_title', explode( ',', wp_unslash( $wert ) ) ) );
			sort( $werte );
			$filter[ substr( $name, 7 ) ] = implode( ',', $werte );
		} elseif ( 0 !== strpos( $name, 'query_type_' ) ) {
			return $seite; // Preis, Sortierung, Suche …: keine Landingpage.
		}
	}

	if ( ! $filter ) {
		return $seite;
	}

	ksort( $filter );

	$paare = array();
	foreach ( $filter as $attribut => $werte ) {
		$paare[] = $attribut . '=' . $werte;
	}

	$kategorie = get_queried_object();
	$alle      = meinshop_landingpages();
	$schluessel = $kategorie->slug . '|' . implode( '&', $paare );

	if ( isset( $alle[ $schluessel ] ) ) {
		$seite        = $alle[ $schluessel ];
		$seite['url'] = get_term_link( $kategorie ) . '?filter_' . implode( '&filter_', $paare );
	}

	return $seite;
}

// Überschrift, Kategoriebeschreibung, eigener Text.
add_filter( 'woocommerce_page_title', function ( $titel ) {
	$seite = meinshop_landingpage();
	return $seite ? $seite['h1'] : $titel;
} );
add_filter( 'woocommerce_taxonomy_archive_description_raw', function ( $text ) {
	return meinshop_landingpage() ? '' : $text;
} );
add_action( 'woocommerce_archive_description', function () {
	$seite = meinshop_landingpage();
	if ( $seite ) {
		echo '<div class="term-description">' . wp_kses_post( $seite['text'] ) . '</div>';
	}
}, 20 );

// Yoast SEO: Canonical auf die Seite selbst, Titel, Beschreibung, index, follow.
add_filter( 'wpseo_canonical', function ( $url ) {
	$seite = meinshop_landingpage();
	return $seite ? $seite['url'] : $url;
}, 999 );
add_filter( 'wpseo_opengraph_url', function ( $url ) {
	$seite = meinshop_landingpage();
	return $seite ? $seite['url'] : $url;
}, 999 );
foreach ( array( 'wpseo_title', 'wpseo_opengraph_title' ) as $meinshop_hook ) {
	add_filter( $meinshop_hook, function ( $titel ) {
		$seite = meinshop_landingpage();
		return $seite ? $seite['titel'] : $titel;
	}, 999 );
}
foreach ( array( 'wpseo_metadesc', 'wpseo_opengraph_desc' ) as $meinshop_hook ) {
	add_filter( $meinshop_hook, function ( $text ) {
		$seite = meinshop_landingpage();
		return $seite ? $seite['beschreibung'] : $text;
	}, 999 );
}
add_filter( 'wpseo_robots_array', function ( $robots ) {
	if ( meinshop_landingpage() ) {
		$robots['index']  = 'index';
		$robots['follow'] = 'follow';
	}
	return $robots;
}, 999 );

Getestet am 20.10.2026 mit WordPress 7.1.3, WooCommerce 11.2.1, Storefront und Yoast SEO 28.7. Was der Code nicht tut:

Für drei Seiten ist das überschaubar. Bei zwanzig Seiten, mehreren Kategorien und einem Redakteur, der Texte ohne PHP pflegen will, wird es mühsam.

Weg 2: Plugins, die Sie vielleicht schon haben

Prüfen Sie zuerst, was Ihr Filter-Plugin kann. Stand 20.10.2026:

Wer bereits eines dieser Werkzeuge nutzt und damit zufrieden ist, braucht kein weiteres.

Weg 3: unser kostenloses Plugin

Wir haben Opuswerk Filter Landing Pages for WooCommerce für Shops gebaut, die die Filter von WooCommerce selbst verwenden, das Widget „Produkte nach Attribut filtern“ oder den Block „Produktfilter“, und die nicht das Filter-Plugin wechseln wollen. Es macht aus den Kombinationen, die Sie auswählen, Landingpages unter der Adresse, die der Filter ohnehin erzeugt:

Was es nicht tut: Filteradressen, die keine Landingpages sind, bleiben unverändert, es schreibt weder die robots.txt noch eine Sitemap, und Landingpages gibt es nur auf Produktkategorien. Es sendet keine Daten und braucht kein Konto. Eine deutsche Übersetzung in der Sie- und der Du-Form ist fertig; WordPress lädt sie, sobald sie auf translate.wordpress.org freigegeben ist.

Kurz-Checkliste

opuswerk entwickelt kleine WordPress-Plugins für WooCommerce-Shops, jedes für genau eine Aufgabe.