Zum Inhalt springen

Wie ich mit Nischler teste, ob Seiten zu Schrankmaßen über Google Besucher finden, bevor es Produkte gibt. Mit Nachfrage-Check, Maß-Parser und Abbruchkriterien.

JP 7 Min. Lesezeit

Ein Hochschrank im Onlineshop, Maße „ca. 80 x 40 x 190 cm“. Ist er 40 cm tief oder 40 cm breit? Bei einem Hochschrank ahnt man es. Bei einem Sideboard mit „120 x 40 x 80“ wird es schon schwieriger, und wer eine 30 cm breite Lücke neben der Waschmaschine füllen will, kann sich keinen Irrtum leisten.

Dafür baue ich Nischler: Du gibst die Maße deiner Nische ein und siehst nur Schränke, die wirklich passen, aus vielen Shops auf einmal. Shops filtern meist nach ein paar Breiten-Stufen und fast nie nach Tiefe. Die Google-Ergebnisse für „schrank 30 cm tief“ sind voll mit Kategorieseiten von Marktplätzen und Produktseiten, auf denen Breite und Tiefe vertauscht sind.

Nischler ist ein Experiment in zwei Stufen. Die Produktsuche ist gebaut, online ist sie noch nicht. Gerade läuft Nischler als Beta ohne Produkte: 30 Ratgeber-Seiten zu den häufigsten Maßen und ein Nischen-Rechner. Die erste Frage ist nur, ob Google überhaupt Besucher auf solche Seiten schickt. Erst wenn das klappt, kommen Produktdaten, Affiliate-Konten und die zweite Frage, ob die Besucher zum Shop weiterklicken, denn davon soll Nischler über Provisionen leben. Wann ich aufhöre, habe ich aufgeschrieben, bevor die erste Seite online war.

Erst die Nachfrage, dann der Code

Bevor ich irgendetwas über Maß-Parsing wusste, wollte ich wissen, ob überhaupt jemand so sucht. Der Keyword Planner von Google liefert Volumen, braucht aber ein Ads-Konto und zeigt ohne laufende Kampagne nur grobe Spannen. Es gibt ein billigeres Signal, das sofort funktioniert: Google Autocomplete. Google schlägt nur Anfragen vor, die tatsächlich gestellt werden. Wenn „hochschrank 30 cm“ zu „hochschrank 30 cm breit 60 cm tief“ ergänzt wird, gibt es Leute, die genau das tippen.

Das Skript dazu ist kurz: sechs Schrank-Typen mal dreizehn Größen, eine Anfrage pro Seed, gut eine Sekunde Pause dazwischen.

ts
const seeds = TYPES.flatMap((t) => SEED_VALUES.map((v) => `${t} ${v} cm`));
for (const seed of seeds) {
	const url = `https://suggestqueries.google.com/complete/search?client=firefox&hl=de&gl=de&q=${encodeURIComponent(seed)}`;
	const [, suggestions] = await (await fetch(url)).json();
	results[seed] = suggestions;
	await sleep(1200);
}

Alle 78 Seeds kamen mit Maß-Vorschlägen zurück, von „schuhschrank 15 cm“ bis „kleiderschrank 180 cm“. Von den 746 verschiedenen Vorschlägen kombinieren 131 mehrere Achsen, also etwa „badschrank 20 cm tief 30 cm breit“ oder „schrank 60 cm breit 40 cm tief 200 cm hoch“. Ein Shop-Filter mit einer Breiten-Auswahl kann solche Anfragen nicht beantworten, eine Maß-Suche schon.

Wie oft gesucht wird, verrät die Probe allerdings nicht. Die Liste mit 336 Keywords für den Keyword Planner liegt bereit, die Zahl trage ich nach.

Welche Zahl ist die Tiefe?

Schwierig an der Produktsuche sind die Produktdaten. Affiliate-Netzwerke liefern Feeds der Shops als CSV, und darin stehen Maße in jeder denkbaren Form:

  • eigene Spalten für Breite, Höhe und Tiefe (selten)
  • B/H/T: 80/190/40 cm oder HxBxT 1900x800x400 mm, also Achsen und Zahlen in derselben Reihenfolge
  • Maße (cm): B: 320 H: 90 T: 215 mit der Einheit ganz woanders
  • 17 cm tief mitten im Fließtext
  • ca. 80 x 40 x 190 cm ohne jede Achsen-Angabe

Alles, was beschriftet ist, löst ein deterministischer Parser. Er liest die Achsen-Folge (HxBxT) und ordnet die Zahlen danach zu, er erkennt Einheiten auch dann, wenn sie nur einmal für alle Werte dastehen, und er rät die Einheit aus der Größenordnung, wenn gar keine angegeben ist (1900 ist bei Möbeln eher mm als cm). Danach kommt eine Plausibilitätsprüfung. Ein Schrank mit 150 cm Tiefe hat höchstwahrscheinlich vertauschte Achsen, also kommt er nicht in die Suche.

Bleibt das unbeschriftete Tripel. Die naheliegende Heuristik lautet „größte Zahl ist die Höhe, kleinste die Tiefe“. Bei Kleider- und Hochschränken stimmt sie meistens, bei Sideboards, Lowboards und Kommoden ist die größte Zahl dagegen die Breite. Eine Heuristik, die manchmal Breite und Tiefe vertauscht, ist genau der Fehler, den Nischler besser machen soll. Also rät der Code an dieser Stelle nie.

Stattdessen geht so ein Produkt an Claude, mit Titel, Kategorie und Beschreibung und einem festen Antwortschema:

ts
const ExtractedDimensions = z.object({
	width_cm: z.number().nullable(),
	height_cm: z.number().nullable(),
	depth_cm: z.number().nullable(),
	outer_dimensions: z.boolean(), // false, wenn nur Innen- oder Fachmaße dastehen
	confidence: z.enum(['high', 'medium', 'low']),
	reasoning: z.string()
});

Durchsuchbar wird das Ergebnis nur, wenn alle drei Achsen da sind, es sich um Außenmaße handelt und die Konfidenz mindestens „mittel“ ist. Alles andere bleibt unsichtbar und wird auch nicht noch einmal geschickt. Lieber zeige ich einen Schrank zu wenig als einen, der nicht in die Nische passt. In der Oberfläche steht an solchen Produkten „Maße KI-zugeordnet“, damit niemand blind vertraut.

Billig ist das, weil das Modell nur den Rest sieht. Der Parser erledigt alles Beschriftete, und ein LLM-Ergebnis bleibt bei jedem neuen Import erhalten, solange sich Titel und Beschreibung nicht ändern. Bei Opus mit niedrigem Effort rechne ich mit etwa einem Cent pro ungelöstem Produkt. Das ist eine Schätzung, die echte Quote unbeschrifteter Maße kenne ich erst mit den echten Feeds.

„30 cm tief“ heißt 27 bis 30,4 cm

Wer „schrank 30 cm tief“ sucht, will keinen Schrank mit 12 cm Tiefe, auch wenn der technisch in 30 cm passt. Jede Achse ist in Nischler deshalb ein Bereich in Millimetern. Die Suche für „30 cm tief“ nimmt alles von 27 cm bis 30,4 cm. Die 4 mm fangen Shops ab, die 29,6 cm auf 30 runden. Ab 100 cm wird der Spielraum 5 cm, weil große Schränke selten zentimetergenau verkauft werden.

Sortiert wird nach Passform: Zuerst kommt der Schrank, der die kleinste Restlücke lässt, summiert über alle begrenzten Achsen.

sql
ORDER BY (? - width_mm) + (? - depth_mm) ASC, price_cents IS NULL, price_cents ASC

Auf den Ratgeber-Seiten steht außerdem, was man beim Messen falsch machen kann. Mein Lieblingsdetail ist das Kippmaß. Ein Schrank, der liegend aufgebaut und dann aufgerichtet wird, braucht seine Diagonale als Raumhöhe. Ein 200 cm hoher und 60 cm tiefer Kleiderschrank braucht also knapp 209 cm, und in einem Altbau mit Deckenbalken ist das ein echtes Problem.

Ratgeber statt Produktliste

Ohne Produkte muss jede Seite mit Wissen überzeugen. Die naheliegende Idee wäre, für jede Kombination aus Typ, Achse und Zentimeter eine Seite zu generieren, also Tausende. Google nennt das „scaled content abuse“, und eine neue Domain ohne Ruf hätte damit sehr schnell ein Problem. Nischler startet deshalb mit 30 Seiten, eine pro häufigem Suchmuster, und jede kombiniert, was für ihren Schrank-Typ, ihre Achse und ihr genaues Maß gilt.

Auf „Schränke 30 cm tief“ steht zum Beispiel, dass es für A4-Ordner knapp wird: Ein Ordner ist 28,5 cm tief, und Rückwand und Tür kosten zusammen 1,5 bis 3 cm. Auf „Kleiderschränke 120 cm breit“ steht, dass so ein Schrank meist zwei bis drei Türen hat und davor so viel Platz frei sein muss, wie eine Tür breit ist. Ein Test prüft, dass jede der 30 Seiten Größen-Hinweise, Messtipps, Tipps zum Schrank-Typ und Fragen mit Antworten hat.

Dazu kommt auf jeder Seite der Nischen-Rechner, vorbelegt mit dem Maß der Seite. Er zieht ab, was in einer Nische verloren geht: 0,5 cm Luft pro Seite für Drehtüren, 3 cm für abstehende Griffe, 2 cm für die Fußleiste. Mit Raumhöhe prüft er auch das Kippmaß. Gerechnet wird im Browser, die Seite selbst ist komplett statisch.

Jede Seite sagt außerdem deutlich, dass es noch keine Produkte gibt. Oben steht eine Beta-Leiste, und wo später die Produktliste hinkommt, steht „Passende Produkte folgen“. Wer aus der Google-Suche kommt und Schränke zum Kaufen erwartet, soll das sofort sehen.

Die zweite Welle steht schon fest, falls die erste funktioniert: Seiten mit zwei Achsen wie „badschrank 30 cm breit 20 cm tief“. Das sind die Anfragen aus der Autocomplete-Probe, bei denen Shop-Filter versagen.

Messen, ohne auf der Seite zu messen

In der Beta zählt die Seite selbst gar nichts. Es gibt keine Cookies, keinen Zähler und kein Skript von Dritten. Was ich wissen will, steht in der Google Search Console: für welche Suchanfragen eine Seite erscheint, auf welcher Position und wie oft sie angeklickt wird.

Zuerst hatte ich etwas anderes gebaut: einen eigenen, cookielosen Zähler in Cloudflare D1, der pro Aufruf Pfad, Zeitpunkt und verweisende Domain speichert und jeden Klick auf „Zum Shop“ mitzählt. Mit Demo-Produkten ging das kurz online, und in den ersten zehn Minuten standen 86 Seitenaufrufe und 81 Shop-Klicks in der Datenbank, fast keiner davon von mir. Neue Hostnamen tauchen sofort in den öffentlichen Zertifikats-Logs auf, und vermutlich waren es Scanner, die sich als Browser ausgeben und jedem Link folgen. Eine Klickrate aus solchen Daten wäre wertlos gewesen. Der Zähler zählt jetzt nur Anfragen mit den Fetch-Metadata-Headern, die echte Browser beim Navigieren mitschicken (Sec-Fetch-Mode: navigate), und Klicks nur, wenn sie von einer eigenen Seite kommen (Sec-Fetch-Site: same-origin). Er kommt mit den Produkten zurück.

Ebenfalls für Stufe 2 bereit liegt ein Bild-Proxy. Bindet man Produktbilder direkt von den Shop-Servern ein, schickt jeder Seitenaufruf die IP des Besuchers an ein Dutzend Dritte. Nischler holt die Bilder deshalb selbst und liefert sie über /bild/{id} aus, und zwar nur die URL, die zum Produkt gespeichert ist, und nur Rasterformate, sonst wäre das ein offener Proxy. Import, Parser und LLM-Pass laufen auf meinem Rechner gegen eine lokale SQLite-Datei, dort liegen auch die API-Keys. Online kommt davon nur an, was durchsuchbar ist.

Wann ich aufhöre

Die Kriterien stehen im Repository:

  • Stufe 1 läuft seit dem 11. Oktober 2026. Nach 90 Tagen, ab dem 9. Januar 2027, schaue ich in die Search Console. Rankt keine der 30 Seiten in den Top 30 für ihr Suchmuster, ist Schluss.
  • Ranken mindestens fünf Seiten in den Top 30 und werden sie angeklickt, kommt Stufe 2 mit echten Produktdaten. Vorher prüfe ich das Suchvolumen im Keyword Planner: Unter 50.000 Suchen im Monat für alle Maß-Muster zusammen lohnt sich der Aufwand nicht.
  • In Stufe 2 gilt dann eine zweite Hürde. Klicken nach 90 Tagen weniger als 20 % der Besucher zum Shop weiter, trägt das Modell nicht.

Wenn die ersten 90 Tage um sind, schreibe ich hier auf, was herausgekommen ist, auch wenn die Antwort „aufhören“ lautet.

#seo#validation#llm#cloudflare

Über das Projekt

Nische 30 × 200 × 35 cm
Hochschrank Elmo B 36 · T 33 cm 6 cm zu breit
Beta

Nischler

Schränke, die in deine Nische passen.

Eine Suche für Schränke nach exakter Breite, Höhe und Tiefe über viele Shops hinweg. Die Beta hat noch keine Produkte: Ratgeber für 30 häufige Maße und ein Nischen-Rechner, als SEO-Experiment, ob die Seiten überhaupt Besucher finden.

Projekt ansehen →

Weiterlesen