The Legal Shield: Setting Up Imprint and Privacy for a Multilingual Hugo Blog
How I conquered the German 'Impressumspflicht' without exposing my home address.

Starting a blog is exciting, but if you are hosting from Germany or targeting European readers, you’ll hit a legal roadblock before your first “Hello World”: the Impressumspflicht (Imprint) and the DSGVO (GDPR).
Here is how I navigated the legal requirements, secured a privacy-friendly address, and implemented a multilingual setup in Hugo.
Why Do You Need This?
In Germany, § 5 DDG (formerly TMG) requires almost every website to have an “Impressum” (Legal Notice). It’s not just for businesses; even a hobby blog can be considered “business-like” if you have affiliate links or just a general “permanence.”
The catch: You have to provide a physical address where you can be reached. For many (including me), putting a private home address on the public internet is a huge “no-go.”
Step 1: Getting a c/o Address
You have a few options to avoid using your home address:
- Friends/Family: The “0€” route. You use their address with a
c/oaddition. - Business Centers: Professional but usually expensive (30€+ / month).
- Dedicated Imprint Services: This is the sweet spot for bloggers.
I chose ihr-impressum.de. It’s affordable, provides a legally “ladungsfähige Anschrift” (a summons-ready address), and they handle the mail for you. But there are many others offering same/similar service to comparable prices.
Step 1.5: Phone and Email (The Digital Side)
Legal compliance doesn’t stop at a physical address. According to § 5 DDG, you also need to provide a way for “fast electronic contact” and “direct communication.” This means:
- A Phone Number: To avoid giving out my private mobile number, I reactivated my old Sipgate VoIP account. It’s perfect because it’s not tied to a physical landline, and people can leave a message on the voicemail which then gets forwarded to my email.
- A Dedicated Email: I created a clean, professional address:
webmaster@reitenba.ch. This keeps my personal inbox separate from any legal or administrative inquiries.
Note: If you use a VoIP service or a redirect, make sure the “direct communication” aspect is still somewhat given (e.g., check your voicemails regularly!).
A note on Bot-Protection: In my public imprint page, I display the address as webmaster [at] reitenba.ch. While humans understand this immediately, it makes it significantly harder for simple scraper bots to harvest the address for spam lists.
Step 2: Generating the Privacy Policy
Privacy policies are a moving target. Instead of writing one yourself, use a generator. I used the free version of e-recht24.de.
Pro-tip: Even if you think you don’t track anything, remember that:
- GitHub Pages logs IP addresses.
- GoatCounter (if you use it) needs a mention.
- Google Fonts/CDNs often leak data to third parties (try to host them locally, or disable those).
Step 3: Implementing Multilingual Support in Hugo
If your blog is bilingual (like mine), you need these pages in both languages. Here is the technical setup I used.
The File Structure
Hugo uses a suffix system for languages. For my setup, I created:
content/impressum.md(German)content/imprint.en.md(English)content/datenschutz.md(German)content/privacy.en.md(English)
.de.md), während die englischen Versionen zwingend das Suffix .en.md benötigen, um korrekt zugeordnet zu werden.The Footer Logic
I wanted the footer to automatically link to the correct language version, therfore I built a “Partial Fallback” system.
In layouts/partials/footer.html, I added a call to a custom legal partial:
<div class="footer-line">
{{- $legalPath := printf "custom/legal-%s.html" .Lang -}}
{{- if templates.Exists (printf "_partials/%s" $legalPath) -}}
{{- partial $legalPath . -}}
{{- else -}}
{{- /* Fallback to German */ -}}
{{- partial "custom/legal-de.html" . -}}
{{- end -}}
</div>Then, I created two small HTML snippets in layouts/_partials/custom/:
legal-de.html
<span><a href="/impressum/">Impressum</a></span>
|
<span><a href="/datenschutz/">Datenschutz</a></span>legal-en.html
<span><a href="/en/imprint/">Imprint</a></span>
|
<span><a href="/en/privacy/">Privacy Policy</a></span>Step 4: Stripping Third-Party CDNs
To stay GDPR-compliant “by design,” I disabled jsDeliver in the hugo.toml. This ensures that assets like Font Awesome are loaded directly from my GitHub Pages server, meaning no user IPs are leaked to other external networks.
# CDN config for third-party library files
[params.cdn]
data = "my_local.yml"And create an empty: assets/data/cdn/my_local.yml to override the default.
Conclusion
Legal compliance doesn’t have to be expensive or ugly. With a service like ihr-impressum.de, a generator like e-recht24.de, and some Hugo logic, you can protect your privacy and your readers’ data while looking professional.
Now, back to actual blogging!