# WordPress → Hugo Migration Record of the one-time import from the WordPress export at `wordpress-export/motorradclubgiebelwaldev.WordPress.2026-07-28.xml` (WordPress 7.0.2, HitMag theme, TablePress, `widgets_on_pages`). ## Result | | | |---|---| | Content files | 26 (9 pages + 17 posts) | | Media placed | 127 / 165 attachments | | Internal links checked | 718, 0 broken | | Stale `wp-content/` URLs | 0 | Re-verify at any time with: ```sh hugo --gc --minify python tools/verify_migration.py ``` ## URL changes Old permalinks were **not** preserved (deliberate — no redirects were required). | Old | New | |---|---| | `/2026/01/13/29-o-fahrt-zum-50-jubilaum/` | `/aktuelles/29-o-fahrt-zum-50-jubilaeum/` | | `/2025/01/03/termin/` | `/aktuelles/28-o-fahrt-2025/` | | `/2022/06/09/o-fahrt-2019/` | `/aktuelles/25-o-fahrt-2022/` | | `/40-jahre-mcg/` | `/archiv/40-jahre-mcg/` | | `/familenausfahrt-2019/` | `/archiv/familienausfahrt-2019/` | | `/bilder-familienausfahrt/` | `/archiv/bilder-familienausfahrt/` | | `/familienfahrt-2022/` | `/archiv/familienfahrt-2022/` | | `/vergangene-o-fahren/` | `/archiv/vergangene-o-fahrten/` | | `/aktuelles/`, `/termine/`, `/downloads/`, `/impressum/` | unchanged | Two post slugs were misleading in WordPress and were renamed to match their own titles: `o-fahrt-2019` → `25-o-fahrt-2022`, `termin` → `28-o-fahrt-2025`. Umlaut slugs were transliterated (`jubilaum` → `jubilaeum`). ## What was dropped, and why | WP id | Item | Reason | |---|---|---| | 3 | "Privacy Policy" | Stock English WordPress template, still a draft, references an old bare IP address. Not usable. The Impressum already carries a `Datenschutz` section, which was migrated verbatim. | | 12 | "Home" | Body was the placeholder *"Dies ist nur eine Demo Seite"*. The real homepage came from the HitMag magazine template plus widgets. | | 410 | untitled draft post | Empty. | ## Things the export did not contain The WXR format carries neither media binaries nor widgets. Both were recovered from the live site before it is retired: - **Media** — `tools/fetch_media.py` downloads all 165 uploads, caps them at 2000 px on the long edge and re-encodes JPEG at q82. Cached in `.cache/` (gitignored); only files actually used are committed. - **Widgets** — the homepage *Unsere Mitglieder* grid (20 portraits) and the sidebar *In Erinnerung* block were WordPress widgets. `tools/build_data.py` scrapes them off the rendered homepage into `data/members.yaml` and `data/memoriam.yaml`. Note: the WordPress gallery widget **shuffles member order on every request**, so the original order carried no meaning. Members are now sorted by name. ## Structural changes - **Termine** — the six TablePress tables (`Termine 2020`–`2026`) became `data/termine.yaml`. WordPress only ever embedded table id 7 (*Termine 2026*) on one page; the other five were orphaned. The `/termine/` page now shows the newest year expanded with earlier years in collapsible sections. - **Aktuelles** — was a page containing `[widgets_on_pages id="1"]`. It is now a real Hugo section with an RSS feed. - **Categories** — `uncategorized` and `aktuelles` were noise and were dropped. `ofahrt` became the tag `O-Fahrt`. ## Data defects found in the export - Post 81 (*Ehrungen von Mitgliedern 2018*) references `wp-image-83`, but attachment 83 no longer exists — the media record was deleted while the upload survived. `tools/wp2hugo.py` recovers such references by matching the `src` filename instead. - Almost every page ends with an empty `

` paragraph; these are stripped. - WordPress wrote emphasis with the whitespace *inside* the markers (`Samstag `), which is not valid CommonMark emphasis. The converter moves the whitespace outside. ## Unused media (38 files, downloaded but not committed) These exist in the WordPress media library but appear nowhere on the live site. They are still in `.cache/uploads/` if any are wanted later. - **Superseded member portraits (2019)** — `Bene_2`, `Burckhardt_2`, `Christian_2`, `Christoph_2`, `Christopher_2`, `HeikeF`, `HeikeR`, `Henning`, `JensB`, `Katrin_2`, `Marcel_2`, `Marvin_2`, `Rainer`, `Steffi_und_Sabine`, `Sven_2`, `Timo_1`, `Timo_2`, `Udo`, `Uwe`, `Gruppenbildanja`. Replaced by the 2022 `*_web.jpg` set. - **Former members** — `Jannik_web.jpg`, `Timo_web.jpg` (present in the library, removed from the live member grid). - **Old theme assets** — `title.jpg`, `cropped-title.jpg`, `bg.jpeg`, `Banner_small_web.jpg` (uncropped), and six `cropped-Emblem_transparent*.png` logo crops. The site now uses `assets/img/logo.png` and `assets/img/banner.jpg`. - **Orphans** — `SZ-Artikel.jpg`, `Banner.jpg` (2023), `1-1.jpeg`, `6-scaled.jpg`, `IMG_20190209_205905-3.jpg`, `jahresfahrt-2019.jpg`. ## Open items - `content/_index.md` carries a **placeholder intro** marked with a `TODO`. There was no homepage text in WordPress to migrate — please replace it. - No separate Datenschutzerklärung page exists. The site is fully static with no cookies, forms or third-party embeds, and the Impressum contains a Datenschutz section. Worth a legal review before the production cutover.