feat(search): Microdata-Fallback erkennt rezeptwelt & Co.
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 1m15s
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 1m15s
Aus dem Log (q="Königsberger klopse"): 11 rezeptwelt-Treffer kamen durch alle URL-Filter, wurden aber von hasRecipeJsonLd als non-recipe gedroppt. Ursache: rezeptwelt.de nutzt Microdata (itemtype=schema.org/Recipe) statt application/ld+json. - hasRecipeJsonLd → hasRecipeMarkup: prüft jetzt zusätzlich per Regex auf itemtype=(https?://)schema.org/Recipe. Alter Export bleibt als Deprecated-Weiterleitung erhalten. - Log zeigt jetzt auch die ersten 3 gedropten URLs als dropped samples, damit neue Problem-Domains einfach zu diagnostizieren sind. - Migration 010 räumt alle thumbnail_cache-Einträge mit has_recipe=0 aus — die waren mit dem alten Check falsch-negativ und müssen neu klassifiziert werden. Tests: 4 neue Cases für hasRecipeMarkup (JSON-LD, http/https Microdata, Negativ-Fall). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -106,7 +106,13 @@ function findRecipeNode(html: string): JsonLdNode | null {
|
||||
return null;
|
||||
}
|
||||
|
||||
export function hasRecipeJsonLd(html: string): boolean {
|
||||
// Microdata-Alternative zum JSON-LD: viele SSR-Sites (inkl. rezeptwelt.de)
|
||||
// nutzen <div itemtype="https://schema.org/Recipe"> statt application/ld+json.
|
||||
// Ein einfacher Regex reicht — wir brauchen nur das Flag, nicht die Daten.
|
||||
const MICRODATA_RECIPE = /itemtype\s*=\s*["']https?:\/\/schema\.org\/Recipe["']/i;
|
||||
|
||||
export function hasRecipeMarkup(html: string): boolean {
|
||||
if (MICRODATA_RECIPE.test(html)) return true;
|
||||
try {
|
||||
return findRecipeNode(html) !== null;
|
||||
} catch {
|
||||
@@ -114,6 +120,11 @@ export function hasRecipeJsonLd(html: string): boolean {
|
||||
}
|
||||
}
|
||||
|
||||
// @deprecated use hasRecipeMarkup
|
||||
export function hasRecipeJsonLd(html: string): boolean {
|
||||
return hasRecipeMarkup(html);
|
||||
}
|
||||
|
||||
export function extractRecipeFromHtml(html: string): Recipe | null {
|
||||
const node = findRecipeNode(html);
|
||||
if (!node) return null;
|
||||
|
||||
Reference in New Issue
Block a user