Lesson #1463
← Back to Knowledge Board
Umlaut-Dictionary darf keine URL-Slugs anfassen
- ID
- 1463
- Author
- Agent
- agent-claude
- Reviewed
- ✓ Yes
- Source authority
- 75 / 100
- Source
- Bei automatischem ae/oe/ue → ä/ö/ü Replace MÜSSEN URL-Slugs (page_get-Args, Route-Pfade, Nav-hrefs, Breadcrumb-Keys) ASCII bleiben — sonst bricht der DB-Lookup.
- Source issue
- —
- Created at
- 2026-05-12T10:00:23.580572+00:00
- Valid until
- —
- Deprecated at
- —
- Supersedes
- —
- Obsidian path
- /root/.claude/projects/-nvmetank1-projects/memory/feedback_umlaut_slug_safe.md
- Obsidian hash
- f38f0482ec529d58d6986f9295bad376
- Tags
- claude-memory,feedback
Content
Beim Dictionary-basierten Umlaut-Fix (`bin/umlaut_fix.py` Pattern) NIE Strings anfassen die URL-Slugs sind. Slugs müssen ASCII bleiben weil:
- Die DB-Spalte `pages.slug` ist ASCII (`ueber-mich`)
- Code muss diesen exact match in `page_get("ueber-mich")` machen
- Replace zu `page_get("über-mich")` → DB-Lookup fehlt → 404 / leere Seite
**Konkrete Stellen die NIE umlaut-replaced werden dürfen:**
- `store.page_get("<slug>")` Argument
- `_rp("/<path>", ...)` / `_register_page("/<path>", ...)` URL-Argument
- `<a href="/<path>">` href-Attribut
- `register_nav_pill(href='/<path>', ...)`
- Breadcrumb-Maps wie `{"ueber-mich": "Über mich"}` Key
- Path-Comparisons wie `if path == "/ueber-mich":`
**Sichtbarer h1/Title bleibt natürlich UTF-8 ("Über mich") — nur die URL/Slug ist ASCII.**
**Why:**
User 2026-05-06: "https://beta.cmoments.ch/%C3%BCber-mich text ist weg" — mein Bulk-Umlaut-Replace hatte 13 `ueber-mich` → `über-mich` Replacements gemacht in 5 Route-Files. DB hatte slug `ueber-mich`, page_get Lookup mit `über-mich` returnte None → leere Seite. Fix: `s/über-mich/ueber-mich/g` in URL-Kontexten + 301-Redirect von `/über-mich` → `/ueber-mich` für Bookmark-Backwards-Compat.
**How to apply:**
- Im Umlaut-Fix-Script eine Allowlist von "wenn URL-context, NICHT anfassen": Pattern wie `page_get\(["']`, `_rp\(["']/`, `href=["']/`, `register_nav.*href=`, `route\(["']/` → diese komplette Statements ausschließen vor dem Word-Replace.
- Bei jeder neuen Page mit umlaut-haltigem Title: slug ASCII halten (`ueber-mich`, `groesse`, `loeschen-confirm`), aber Title UTF-8 lassen ("Über mich", "Größe", "Löschen-Bestätigung").
- Wenn Bookmark-Links auf UTF-8-URL existieren könnten: 301-Redirect von UTF-8 zu ASCII einrichten via `@public_bp.route('/über-mich') → return redirect('/ueber-mich', 301)`.