fix: Warenkorb, Kasse, Konto und Rechnungen fielen nicht aus dem Suchindex
robots.txt sperrte /checkout, /warenkorb, /konto und /rechnung fuer Crawler. Das verbietet aber nur das Abrufen, nicht das Indexieren: verweist irgendwo ein Link auf eine dieser Seiten, nimmt Google die URL trotzdem auf — als inhaltslosen Treffer mit dem Hinweis "Fuer diese Seite sind keine Informationen verfuegbar". Der uebliche Ausweg, ein noindex-Meta-Tag, half hier nicht: eine per robots.txt gesperrte Seite wird nie geladen, also sieht der Crawler das Tag nie. Die Sperre verhinderte ausgerechnet das Mittel, das die URLs wieder aus dem Index geholt haette. Keine dieser Seiten trug bisher ueberhaupt ein noindex. Jetzt greifen beide Mechanismen zusammen statt gegeneinander: - lib/seo.ts buendelt die beiden robots-Bausteine. noIndex laesst Links weiterhin folgen (Footer- und Produktlinks im Warenkorb sollen ihre Linkkraft behalten), noIndexPrivate unterbindet zusaetzlich Cache-Kopie, Bildindexierung und Textausschnitt. - Kasse, Bestellbestaetigung und Rechnungsansicht bekommen noIndexPrivate, der Warenkorb noIndex. - Der gesamte Kontobereich bekommt das Tag einmal ueber ein neues konto/layout.tsx statt in zehn Unterseiten einzeln. Metadata erbt feldweise, ein eigener title in einer Unterseite loescht den Wert also nicht. - robots.txt sperrt nur noch /api/ und /admin — also das, was ein Crawler wirklich nie abrufen soll. Alles andere darf gecrawlt werden, damit das noindex ueberhaupt gelesen wird. /uploads bleibt bewusst offen: dort liegen die Produktbilder, die in der Bildersuche erwuenscht sind. Zusaetzlich eine ausdrueckliche Regel fuer GPTBot, ClaudeBot, PerplexityBot und Google-Extended (oeffentliche Inhalte ja, interne Bereiche nein) sowie die host-Angabe in robots.txt. tsc: 0 Fehler. vitest: 359/359 gruen. eslint: 0 Warnungen. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
1 parent
bffcce127d
commit
a8990a872a
7 files changed
+105
-5
No files matched your search
@@ -0,0 +1,19 @@
|
||||
import type { Metadata } from "next";
|
||||
import { noIndexPrivate } from "@/lib/seo";
|
||||
|
||||
// Der Kontobereich enthaelt ausschliesslich personenbezogene Seiten
|
||||
// (Bestellungen, Adressen, Wunschliste, Zwei-Faktor-Einrichtung) sowie die
|
||||
// Anmeldung selbst. Nichts davon gehoert in den Suchindex.
|
||||
//
|
||||
// Gesetzt einmal hier im Layout statt in jeder Unterseite: /konto hat aktuell
|
||||
// zehn Routen, und die naechste vergisst man sonst garantiert. Next.js
|
||||
// vererbt robots aus dem Layout an alle Unterseiten; setzt eine Unterseite
|
||||
// eigene Metadata (z.B. nur einen title), bleibt der geerbte robots-Wert
|
||||
// erhalten, weil Metadata feldweise und nicht als Ganzes ueberschrieben wird.
|
||||
export const metadata: Metadata = {
|
||||
robots: noIndexPrivate,
|
||||
};
|
||||
|
||||
export default function KontoLayout({ children }: { children: React.ReactNode }) {
|
||||
return children;
|
||||
}
|
||||
Reference in new issue
Block a user