Lesson #1463

← Back to Knowledge Board
Umlaut-Dictionary darf keine URL-Slugs anfassen
ID
1463
Author
ai
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)`.