diff --git a/CLAUDE.md b/CLAUDE.md index 3446892..65eeccf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -5,7 +5,8 @@ Punkrock-Band aus Trier. Hugo-Seite, Deutsch, deployt mit `deploy.ps1`. ## Website - Inhalte: `content/` (Startseite `_index.md`, Band `about.md`, Musik `music/_index.md`) -- Shows: eine Datei pro Show in `content/shows/` (`title`, `date`, `location`, `poster`; `tba: true` für noch unbekannte Termine) +- Shows: eine Datei pro Show in `content/shows/` (`title`, `date`, `location`, `poster`; `tba: true` für noch unbekannte Termine; optional `city` und `address` für die Event-Daten bei Google, nur bestätigte Adressen) +- SEO: JSON-LD in `layouts/partials/schema.html` (Band auf der Startseite, kommende Shows auf `/shows/`), eigene Sitemap ohne Show-Einzelseiten in `layouts/_default/sitemap.xml` - Release-Cover: `releases/JJJJMMTT_[Single|Album]_[Name].jpg`. Titel und Datum kommen aus dem Dateinamen. - Design: `assets/css/main.css`. Farben `--deep #081226`, `--bolt #fff200` (Blitz-Gelb), `--red #e5232b`; Schriften Big Shoulders Display (Überschriften) und Archivo (Text), liegen in `static/fonts/`. - Links und E-Mail stehen in `hugo.toml` unter `[params]`. diff --git a/content/shows/2024_Pink_Future.md b/content/shows/2024_Pink_Future.md index 0b9f390..f1b42f2 100644 --- a/content/shows/2024_Pink_Future.md +++ b/content/shows/2024_Pink_Future.md @@ -3,4 +3,5 @@ title: "Pink Future" date: 2024-06-07 location: Palastgarten Trier poster: /img/shows/2024_Pink_Future.jpeg +aliases: ["/shows/2024_pink_future-copy/"] --- diff --git a/content/shows/2026_Halloween.md b/content/shows/2026_Halloween.md index a5e81f6..04f8a72 100644 --- a/content/shows/2026_Halloween.md +++ b/content/shows/2026_Halloween.md @@ -2,5 +2,6 @@ title: "Halloween Rock" date: 2026-10-31 location: Gutweiler -poster: /img/shows/2026_Haloween.jpeg +poster: /img/shows/2026_Halloween.jpeg +aliases: ["/shows/2026_haloween/"] --- diff --git a/hugo.toml b/hugo.toml index 2bf3608..dac1de8 100644 --- a/hugo.toml +++ b/hugo.toml @@ -3,6 +3,7 @@ baseURL = "https://www.deepwatersurvival.de/" languageCode = "de" defaultContentLanguage = "de" disableKinds = ["taxonomy", "term", "RSS"] +enableRobotsTXT = true # Shows liegen in der Zukunft – ohne diese Option würde Hugo sie nicht bauen. buildFuture = true diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index 4e77f32..557dc9e 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -23,6 +23,7 @@ {{ $css := resources.Get "css/main.css" | minify | fingerprint }} + {{ partial "schema.html" . }} diff --git a/layouts/_default/sitemap.xml b/layouts/_default/sitemap.xml new file mode 100644 index 0000000..5015bb5 --- /dev/null +++ b/layouts/_default/sitemap.xml @@ -0,0 +1,18 @@ +{{- /* + Eigene Sitemap: Die Einzelseiten unter /shows/ sind noindex-Weiterleitungen + auf /shows/ und gehören nicht hinein. lastmod in der Zukunft (kommt von + kommenden Shows) wird weggelassen. +*/ -}} +{{ printf "" | safeHTML }} + + {{- range .Pages }} + {{- if and .Permalink (not (and (eq .Section "shows") (eq .Kind "page"))) }} + + {{ .Permalink }} + {{- if and (not .Lastmod.IsZero) (le .Lastmod now) }} + {{ safeHTML (.Lastmod.Format "2006-01-02T15:04:05-07:00") }} + {{- end }} + + {{- end }} + {{- end }} + diff --git a/layouts/partials/schema.html b/layouts/partials/schema.html new file mode 100644 index 0000000..7fbeccd --- /dev/null +++ b/layouts/partials/schema.html @@ -0,0 +1,64 @@ +{{/* + JSON-LD für Suchmaschinen. + Startseite: die Band (MusicGroup) mit Besetzung, Album und Profilen. + /shows/: ein MusicEvent pro kommender Show mit Ort (TBA-Termine fehlen). + Optional im Show-Front-Matter: city (Ort, sonst wird location genommen) + und address (Straße und Hausnummer). Nur bestätigte Adressen eintragen. +*/}} +{{- $bandID := "/#band" | absURL -}} +{{- $band := dict "@type" "MusicGroup" "@id" $bandID "name" site.Title "url" site.Home.Permalink -}} + +{{- if .IsHome -}} + {{- $band = merge $band (dict + "description" site.Params.description + "genre" "Punkrock" + "email" site.Params.email + "logo" ("/img/logo-crop.png" | absURL) + "location" (dict "@type" "Place" "name" "Trier" "address" (dict "@type" "PostalAddress" "addressLocality" "Trier" "addressCountry" "DE")) + "sameAs" (slice site.Params.spotify site.Params.instagram site.Params.youtube) + ) -}} + {{- with resources.Get "img/AlbumReleaseParty_Stage_compressed.jpg" }}{{ with .Resize "1200x jpg q80" }} + {{- $band = merge $band (dict "image" .Permalink) -}} + {{- end }}{{ end -}} + {{- with site.GetPage "/about" }}{{ with .Params.members }} + {{- $members := slice -}} + {{- range . }} + {{- $members = $members | append (dict "@type" "OrganizationRole" "roleName" .role "member" (dict "@type" "Person" "name" .name)) -}} + {{- end }} + {{- $band = merge $band (dict "member" $members) -}} + {{- end }}{{ end -}} + {{- $albums := slice -}} + {{- range where (partial "releases.html" .) "kind" "Album" }} + {{- $album := dict "@type" "MusicAlbum" "name" .title "datePublished" (.date.Format "2006-01-02") "byArtist" (dict "@id" $bandID) -}} + {{- with .cover.Resize "800x webp q78" }}{{ $album = merge $album (dict "image" .Permalink) }}{{ end -}} + {{- $albums = $albums | append $album -}} + {{- end }} + {{- with $albums }}{{ $band = merge $band (dict "album" .) }}{{ end -}} + {{- $data := merge (dict "@context" "https://schema.org") $band }} + +{{- end -}} + +{{- if and (eq .Kind "section") (eq .Section "shows") -}} + {{- $events := slice -}} + {{- range (where .Pages "Date" "ge" now).ByDate }} + {{- if and (not .Params.tba) .Params.location }} + {{- $address := dict "@type" "PostalAddress" "addressLocality" (.Params.city | default .Params.location) "addressCountry" "DE" -}} + {{- with .Params.address }}{{ $address = merge $address (dict "streetAddress" .) }}{{ end -}} + {{- $event := dict + "@type" "MusicEvent" + "name" (printf "%s mit %s" .Title site.Title) + "startDate" (.Date.Format "2006-01-02") + "eventStatus" "https://schema.org/EventScheduled" + "eventAttendanceMode" "https://schema.org/OfflineEventAttendanceMode" + "location" (dict "@type" "Place" "name" .Params.location "address" $address) + "performer" $band + "url" $.Permalink + -}} + {{- with .Params.poster }}{{ $event = merge $event (dict "image" (. | absURL)) }}{{ end -}} + {{- $events = $events | append $event -}} + {{- end }} + {{- end }} + {{- with $events }} + + {{- end }} +{{- end -}} diff --git a/layouts/robots.txt b/layouts/robots.txt new file mode 100644 index 0000000..6b4c001 --- /dev/null +++ b/layouts/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: {{ "sitemap.xml" | absURL }}