diff --git a/content/de/posts/Route_Hansaplatz_mit_Beschreibung.png b/content/de/posts/2024-12-29-hansaplatz/Route_Hansaplatz_mit_Beschreibung.png
similarity index 100%
rename from content/de/posts/Route_Hansaplatz_mit_Beschreibung.png
rename to content/de/posts/2024-12-29-hansaplatz/Route_Hansaplatz_mit_Beschreibung.png
diff --git a/content/de/posts/2024-12-29-hansaplatz.md b/content/de/posts/2024-12-29-hansaplatz/index.md
similarity index 100%
rename from content/de/posts/2024-12-29-hansaplatz.md
rename to content/de/posts/2024-12-29-hansaplatz/index.md
diff --git a/layouts/_partials/head/extra.html b/layouts/_partials/head/extra.html
new file mode 100644
index 0000000..8a5efda
--- /dev/null
+++ b/layouts/_partials/head/extra.html
@@ -0,0 +1,40 @@
+{{- /*
+Open Graph image for link previews. The theme's head/meta.html writes og:image only for the
+"image" param; without it, this uses the first image in the page's Markdown, scaled down to at
+most 1200 pixels wide, with its alt text as og:image:alt.
+*/ -}}
+{{- if not ($.Param "image") -}}
+ {{- with findRESubmatch `!\[([^\]]*)\]\(\s*([^\s)>]+)` .RawContent 1 -}}
+ {{- $alt := index . 0 1 -}}
+ {{- $dest := index . 0 2 -}}
+ {{- $url := "" -}}
+ {{- $width := 0 -}}
+ {{- $height := 0 -}}
+ {{- $resource := false -}}
+ {{- if findRE `^https?://` $dest -}}
+ {{- $url = $dest -}}
+ {{- else -}}
+ {{- $resource = or ($.Resources.Get (strings.TrimPrefix "./" $dest)) (resources.Get $dest) -}}
+ {{- end -}}
+ {{- with $resource -}}
+ {{- $image := . -}}
+ {{- if and (eq .ResourceType "image") (ne .MediaType.SubType "svg") -}}
+ {{- if gt .Width 1200 }}{{ $image = .Resize "1200x" }}{{ end -}}
+ {{- $width = $image.Width -}}
+ {{- $height = $image.Height -}}
+ {{- end -}}
+ {{- $url = $image.Permalink -}}
+ {{- end -}}
+ {{- with $url }}
+
+{{- with $width }}
+
+
+{{- end }}
+{{- with $alt }}
+
+{{- end }}
+
+ {{- end -}}
+ {{- end -}}
+{{- end -}}