Blog de Pocallum — From Blogger to WordPress, from WordPress to Hugo

Blog.pocallum.cat: from Blogger to WordPress and now to static Hugo. 2,353 posts migrated with full URL parity. LinuxBCN.
Goodbye WordPress, hello Hugo
The Blog de Pocallum —a photographic chronicle of concerts, festivals, cameras and neighbourhood life in Barcelona since 2010— has switched engines entirely, and it’s not the first time. The result of this latest step: more speed, less attack surface, and the exact same content at the exact same URLs.
Three eras, one blog
The blog hasn’t always lived on WordPress. It started on Blogger, Google’s free platform: convenient to get going, but with content, data and design under a third party’s control, with neither sovereignty nor long-term predictability.
The move to WordPress was already a step towards free software: open source, control over your own content, no longer depending on a single company to keep existing. It served well for 15 years, but over time it accumulated the weight typical of any database-backed CMS: plugins, constant updates, and an attack surface that kept growing.
With Hugo, the cycle closes with the final step: a static site, no database, no third-party dependencies, hosted on our own servers. Full data sovereignty, no intermediary, nothing left to exploit. From Google’s cloud to free software, and from free software to full sovereignty: each step has made the blog a little cleaner, simpler, purer and more proactive.
Hugo is free software too, and we stay true to that same philosophy: we don’t just use it, we contribute to it. We’re currently helping with translations and documenting the Catalan version of the project.
Why leave WordPress
WordPress served well for a decade, but it had accumulated problems that couldn’t be ignored:
- Weight and slowness: 2,353 posts, 137,000 words, 96 categories and 3,177 tags, served by a CMS running on MySQL and PHP.
- Security: WordPress is a massive target for bots and exploits; every plugin is one more attack surface.
- Maintenance: constant updates to core, plugins and themes, and patches with every release.
- Historical vulnerability: with 15 years of history, any forgotten version was a risk.
WordPress keeps getting better and more powerful, but that’s exactly what makes it oversized for a blog. It burns server resources that needlessly drive up the cost of maintaining projects that should be simple, in exchange for security and features we’ll never use. Moving to a static site is also a small step towards being a bit more sustainable.
The migration process
The migration was done step by step, always with the safety net of being able to roll back:
- Full export of WordPress via XML —all the content: posts, categories, tags and metadata.
- Conversion to Markdown with the
wordpress-export-to-markdowntool (v3.0.5): 2,353 posts (plus 10 drafts) converted into clean.mdfiles. - Post-processing with a custom script that recovered thumbnails, featured images and tags from the canonical source, and resolved escaped Vimeo shortcodes.
- A dedicated Hugo theme, inheriting the parent site’s design system but adapted for the blog: chronological listing, monthly archive, mosaic layout, lightbox and static search.
- Full URL parity: every WordPress permalink (
/YYYY/MM/DD/slug/) stays identical. No existing link —external, search results, RSS— breaks. Verified with a 1:1 crawler (2,360 URLs checked). - SEO: Yoast titles and meta descriptions preserved, JSON-LD, Open Graph and Twitter Cards generated by the theme, no plugins involved.
Advantages
- Performance: no PHP, no MySQL. Pure, minified HTML, served fast even from basic hosting.
- Security: nothing left to exploit —no admin panel, no database, no plugins.
- Full control: content lives in Git, versioned, clonable, with no dependency on a closed CMS. Edited in Markdown.
- Static search (Pagefind): full-text search, indexed at build time, no server or cookies.
- GDPR-friendly analytics: GoatCounter, cookie-free, using the same counter already in place.
- Simple management: text and images in files, nothing in a database.
- Frictionless editing: Sveltia CMS, adapted to our own taste and needs —visual content editing with no need to touch Markdown by hand.

The result, in numbers
- 2,353 posts and 137,000 words of content, migrated in full.
- 71 legacy comments preserved as static content within the posts.
- One single Markdown file per post, with complete frontmatter (date, categories, tags, thumbnails).
Image optimisation — real savings
| Files | Size | |
|---|---|---|
| Originals | 19,516 | 3,131 MB |
| WebP (2500px display + 800px thumbnails) | 25,948 | 1,813 MB |
Savings: 1,318 MB (−42.1%), about 0.07 MB per image on average, with no visible loss of quality.
Why Hugo
Hugo is a static site generator written in Go: it compiles 2,300+ pages in seconds, with no runtime dependency and a clean, powerful templating system. For a photography blog with 15 years of history, Hugo does exactly what it needs to: turn Markdown into fast HTML and keep the content within reach of the person who made it.
The whole migration —with its planned cutover: full backup, HTML deployment, URL-by-URL verification, and only then decommissioning WordPress— is a process anyone running a WordPress blog can replicate. The blog is now faster, safer, and 15 years of photographs are still exactly where they belong.
What we solved
How do you migrate 2,353 Blogger posts to Hugo without losing URLs?
We kept every URL with 1:1 parity and removed the database and dependencies.
Is the historical content lost?
No: 137,000 words and 71 imported comments are preserved.
What else do you gain?
More data sovereignty: the content is your own and lives on your own server. You can publish blog posts without any platform restriction and with tailored SEO.
What content manager is behind it?
A custom CMS with exactly the right features —no more, no less. It is lighter, more secure and shaped around the person who uses it every day.