SEOOptimierungenAlex07092025
This commit is contained in:
parent
6828c3f835
commit
b7f8f2ac5e
34 changed files with 4426 additions and 253 deletions
|
|
@ -194,3 +194,12 @@ body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sr-only {
|
||||||
|
position: absolute !important;
|
||||||
|
width: 1px; height: 1px;
|
||||||
|
padding: 0; margin: -1px; overflow: hidden;
|
||||||
|
clip: rect(0,0,0,0); white-space: nowrap; border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
######################## default configuration ####################
|
######################## default configuration ####################
|
||||||
baseURL = ""
|
baseURL = "https://www.amperion.at/"
|
||||||
|
|
||||||
title = "AMPERION"
|
title = "AMPERION"
|
||||||
theme = "airspace-hugo"
|
theme = "airspace-hugo"
|
||||||
# Default time zone for time stamps; use any valid tz database name: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
|
# Default time zone for time stamps; use any valid tz database name: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
|
||||||
|
|
@ -36,7 +37,8 @@ target = '$1'
|
||||||
|
|
||||||
############################# Outputs ##############################
|
############################# Outputs ##############################
|
||||||
[outputs]
|
[outputs]
|
||||||
home = ["HTML", "WebAppManifest"]
|
home = ["HTML", "Sitemap", "WebAppManifest"]
|
||||||
|
|
||||||
|
|
||||||
############################# Imaging ##############################
|
############################# Imaging ##############################
|
||||||
[imaging]
|
[imaging]
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ logo_text = "AMPERION"
|
||||||
# navbar fixed to top
|
# navbar fixed to top
|
||||||
navbar_fixed = true
|
navbar_fixed = true
|
||||||
# OpenGraph / Twitter Card metadata
|
# OpenGraph / Twitter Card metadata
|
||||||
description = "This is meta description"
|
description = "Staatlich geprüftes Ingenieurbüro & Elektrotechnikbetrieb: Planung, Projektmanagement & Consulting für Photovoltaik, Energiespeicher und Ladeinfrastruktur."
|
||||||
|
default_meta_description = "Staatlich geprüftes Ingenieurbüro & Elektrotechnikbetrieb: Planung, Projektmanagement & Consulting für Photovoltaik, Energiespeicher und Ladeinfrastruktur."
|
||||||
author = "AMPERION GmbH"
|
author = "AMPERION GmbH"
|
||||||
image = "images/logo.webp" # this image will be used as fallback if a page has no image of its own
|
image = "images/logo.webp" # this image will be used as fallback if a page has no image of its own
|
||||||
# Whether to display text descriptors (like "E-mail: ", "Phone: ") before the address block elements
|
# Whether to display text descriptors (like "E-mail: ", "Phone: ") before the address block elements
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,9 @@ draft: false
|
||||||
tags: ["E-Mobilität", "Ladeinfrastruktur", "AC/DC", "Lastmanagement", "Backend", "Abrechnung", "EMS"]
|
tags: ["E-Mobilität", "Ladeinfrastruktur", "AC/DC", "Lastmanagement", "Backend", "Abrechnung", "EMS"]
|
||||||
categories: ["Fokusthemen"]
|
categories: ["Fokusthemen"]
|
||||||
|
|
||||||
meta_description: "Ladeinfrastruktur: AC/DC-Planung, Netzanschluss, Lastmanagement, Abrechnung – skalierbar & zukunftssicher."
|
meta_title: "Ladeinfrastruktur planen (AC/DC) | AMPERION"
|
||||||
|
meta_description: "Standort, Layout, Mittelspannungsanschluss, eichrechtskonforme DC-Systeme und dynamisches Lastmanagement – bis zur Inbetriebnahme."
|
||||||
|
|
||||||
kicker: "Fokusthema"
|
kicker: "Fokusthema"
|
||||||
subtitle: "Ladeinfrastruktur, die heute funktioniert und morgen skaliert."
|
subtitle: "Ladeinfrastruktur, die heute funktioniert und morgen skaliert."
|
||||||
hero_cta_label: "Jetzt starten"
|
hero_cta_label: "Jetzt starten"
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ draft: false
|
||||||
tags: ["Speicher", "Batteriespeicher", "Peak-Shaving", "Eigenverbrauch", "EMS", "Notstrom", "Redox-Flow"]
|
tags: ["Speicher", "Batteriespeicher", "Peak-Shaving", "Eigenverbrauch", "EMS", "Notstrom", "Redox-Flow"]
|
||||||
categories: ["Fokusthemen"]
|
categories: ["Fokusthemen"]
|
||||||
|
|
||||||
meta_description: "Stromspeicher für Unternehmen: technologieoffen dimensioniert, wirtschaftlich begründet, sicher integriert – mit EMS & Notstrom."
|
meta_title: "Energiespeicher für Gewerbe | AMPERION"
|
||||||
|
meta_description: "Peak-Shaving, Eigenverbrauchsoptimierung und EMS-Integration – korrekt dimensioniert mit Blick auf C-Rate, Zyklen und Degradation."
|
||||||
kicker: "Fokusthema"
|
kicker: "Fokusthema"
|
||||||
subtitle: "Lastspitzen kappen, Kosten senken – sicher ins EMS eingebunden."
|
subtitle: "Lastspitzen kappen, Kosten senken – sicher ins EMS eingebunden."
|
||||||
hero_cta_label: "Speicherlösung planen"
|
hero_cta_label: "Speicherlösung planen"
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,8 @@ date: 2025-08-12
|
||||||
draft: false
|
draft: false
|
||||||
tags: ["Photovoltaik", "PV Planung", "Wirtschaftlichkeitsberechnung", "Netzintegration", "Eigenverbrauch", "EMS", "Ladeinfrastruktur"]
|
tags: ["Photovoltaik", "PV Planung", "Wirtschaftlichkeitsberechnung", "Netzintegration", "Eigenverbrauch", "EMS", "Ladeinfrastruktur"]
|
||||||
categories: ["Fokusthemen"]
|
categories: ["Fokusthemen"]
|
||||||
meta_description: "PV für Unternehmen & Gemeinden: wirtschaftlich, sicher, integriert. PV mit Speicher & Ladeinfrastruktur – aus einer Hand."
|
meta_title: "Photovoltaik Planung & Netzzutritt (B2B) | AMPERION"
|
||||||
|
meta_description: "Einreich-/Ausführungsplanung, Stringdesign, Brandschutz und netzbetreiberkonforme Umsetzung für Gewerbe/Industrie und Kommunen."
|
||||||
kicker: "Fokusthema"
|
kicker: "Fokusthema"
|
||||||
subtitle: "Präzise geplant – maximaler Eigenverbrauch, stabile Erträge."
|
subtitle: "Präzise geplant – maximaler Eigenverbrauch, stabile Erträge."
|
||||||
hero_cta_label: "Projekt starten"
|
hero_cta_label: "Projekt starten"
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,8 @@ date: 2025-08-12
|
||||||
draft: false
|
draft: false
|
||||||
tags: ["Consulting", "Standortprüfung", "Energiekonzepte", "Förderberatung", "Energiemanagement", "Bestandsanlagen", "Technologievergleich"]
|
tags: ["Consulting", "Standortprüfung", "Energiekonzepte", "Förderberatung", "Energiemanagement", "Bestandsanlagen", "Technologievergleich"]
|
||||||
categories: ["Leistungen"]
|
categories: ["Leistungen"]
|
||||||
meta_description: "Energie-Consulting: unabhängig, wirtschaftlich, technologieoffen. Von Standortprüfung bis Energiemanagement – mit klarem Business Case."
|
meta_title: "Consulting Energieprojekte (B2B) | AMPERION"
|
||||||
|
meta_description: "Standort-/Lastganganalysen, Förder-Check, Machbarkeit und Business-Case mit Szenarien & Sensitivität – technologieoffen."
|
||||||
kicker: "Strategie & Engineering"
|
kicker: "Strategie & Engineering"
|
||||||
subtitle: "Technologieoffen beraten – mit klarem Business Case."
|
subtitle: "Technologieoffen beraten – mit klarem Business Case."
|
||||||
hero_cta_label: "Beratungstermin sichern"
|
hero_cta_label: "Beratungstermin sichern"
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,8 @@ date: 2025-08-12
|
||||||
draft: false
|
draft: false
|
||||||
tags: ["Planung", "Einreichplanung", "Ausführungsplanung", "Energieausweis", "Energiekonzept", "Technische Studien", "Photovoltaik", "Speicher", "Ladeinfrastruktur"]
|
tags: ["Planung", "Einreichplanung", "Ausführungsplanung", "Energieausweis", "Energiekonzept", "Technische Studien", "Photovoltaik", "Speicher", "Ladeinfrastruktur"]
|
||||||
categories: ["Leistungen"]
|
categories: ["Leistungen"]
|
||||||
meta_description: "Planung für PV, Speicher & Ladeinfrastruktur – unabhängig, normkonform, wirtschaftlich. Staatlich geprüft & konzessioniert."
|
meta_title: "Einreich- & Ausführungsplanung | AMPERION"
|
||||||
|
meta_description: "Stromlauf-/Verlegepläne, Schutz/Selektivität, Brandschutz und Netzanschluss – sauber dokumentiert und netzbetreiberkonform."
|
||||||
kicker: "Engineering & Elektrotechnik"
|
kicker: "Engineering & Elektrotechnik"
|
||||||
subtitle: "Technisch präzise geplant – wirtschaftlich belastbar."
|
subtitle: "Technisch präzise geplant – wirtschaftlich belastbar."
|
||||||
hero_cta_label: "Jetzt unverbindlich anfragen"
|
hero_cta_label: "Jetzt unverbindlich anfragen"
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ date: 2025-08-12
|
||||||
draft: false
|
draft: false
|
||||||
tags: ["Projektmanagement", "Baukoordination", "Begleitende Kontrolle", "Bauherrnvertretung", "Dokumentation", "Inbetriebnahme"]
|
tags: ["Projektmanagement", "Baukoordination", "Begleitende Kontrolle", "Bauherrnvertretung", "Dokumentation", "Inbetriebnahme"]
|
||||||
categories: ["Leistungen"]
|
categories: ["Leistungen"]
|
||||||
|
meta_title: "Projektmanagement Elektrotechnik | AMPERION"
|
||||||
meta_description: "Projektmanagement für Energieprojekte: Koordination, Kontrolle, Dokumentation – unabhängig, elektrotechnisch fundiert, sicher zur Abnahme."
|
meta_description: "Projektmanagement für Energieprojekte: Koordination, Kontrolle, Dokumentation – unabhängig, elektrotechnisch fundiert, sicher zur Abnahme."
|
||||||
kicker: "Engineering & Elektrotechnik"
|
kicker: "Engineering & Elektrotechnik"
|
||||||
subtitle: "Sicher zur Abnahme – Termine, Kosten, Qualität im Griff."
|
subtitle: "Sicher zur Abnahme – Termine, Kosten, Qualität im Griff."
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
---
|
---
|
||||||
|
meta_title: "Ingenieurbüro: PV, Speicher & Ladeinfrastruktur | AMPERION"
|
||||||
|
meta_description: "Planung, Netzanschluss & Projektmanagement für Unternehmen und Kommunen: Photovoltaik, Energiespeicher, Ladeinfrastruktur – herstellerneutral, normkonform, wirtschaftlich."
|
||||||
|
|
||||||
############################### Banner ##############################
|
############################### Banner ##############################
|
||||||
banner:
|
banner:
|
||||||
enable: true
|
enable: true
|
||||||
|
|
@ -19,14 +22,26 @@ banner:
|
||||||
link: "#about"
|
link: "#about"
|
||||||
image: "images/pfeil-nach-unten-skizze.webp"
|
image: "images/pfeil-nach-unten-skizze.webp"
|
||||||
label: "About us"
|
label: "About us"
|
||||||
|
|
||||||
############################# About #################################
|
############################# About #################################
|
||||||
about:
|
about:
|
||||||
enable: true
|
enable: true
|
||||||
title: "ÜBER AMPERION"
|
title: "ÜBER AMPERION"
|
||||||
description: "Technik mit Verantwortung. Planung mit Weitblick."
|
description: "Technik mit Verantwortung. Planung mit Weitblick."
|
||||||
content: "<b> AMPERION </b> ist ein <b>staatlich geprüftes Ingenieurbüro</b> und <b> konzessionierter Elektrotechnikbetrieb</b> mit Sitz in Niederösterreich. <p> Wir unterstützen Unternehmen, Gemeinden und Bauträger bei der Planung und Umsetzung nachhaltiger Energiesysteme – mit einem klaren Fokus auf Photovoltaik, Speicherlösungen, Ladeinfrastruktur und smarte Gebäudetechnik. <br><br><b> Systemisch. Unabhängig. Zukunftsorientiert. </b> <br><br> Denn Technik ist für uns kein Selbstzweck – sondern ein Werkzeug, um Lösungen zu schaffen, die in der Praxis funktionieren und dauerhaft Bestand haben. <br> Mit technischem <b> Know-how, Verantwortungsbewusstsein </b> und einem geschulten Blick fürs Ganze bringen wir Energieprojekte von der Idee bis zur Inbetriebnahme. </b> </p>"
|
content: |
|
||||||
image: "images/ingenieurbuero.svg"
|
**AMPERION** ist ein **staatlich geprüftes Ingenieurbüro** und **konzessionierter Elektrotechnikbetrieb** in Niederösterreich. Wir unterstützen **Unternehmen, Gemeinden, Bauträger aber auch Privatpersonen** dabei, Energieprojekte technisch sicher, wirtschaftlich und termingerecht umzusetzen – von der Idee bis zur Inbetriebnahme.
|
||||||
|
|
||||||
|
Unsere Schwerpunkte: **[Photovoltaik](/photovoltaik/)**, **[Energiespeicher](/energiespeicher/)** und **[Ladeinfrastruktur](/e-mobilitaet/)**. Wir planen **herstellerneutral**, prüfen Varianten transparent und achten auf **Normkonformität**.
|
||||||
|
|
||||||
|
**Was Sie erwarten können:**
|
||||||
|
- **Einreich- & Ausführungsplanung:** mit präzisem Stringdesign, Anschlusskonzept und geprüften Plänen.
|
||||||
|
- **Projektmanagement & Baukoordination:** klare Meilensteine, Schnittstellenführung, Dokumentation bis zur Abnahme.
|
||||||
|
- **Beratung und Consulting:** Eigenverbrauchsquote, Business case/Wirtschaftlichkeitsanalyse, Förderungen für belastbare Investitionsentscheidungen.
|
||||||
|
- **Systemdenken**: PV, Speicher, Laden und Energiemanagement als integriertes Energiesystem.
|
||||||
|
|
||||||
|
Unser Anspruch: **systemisch, unabhängig, zukunftsorientiert**. So entstehen Lösungen, die **in der Praxis funktionieren** – zuverlässig im Betrieb, **erweiterbar** bei steigendem Bedarf und **wirtschaftlich** über den gesamten Lebenszyklus.
|
||||||
|
|
||||||
|
image: "images/ingenieurbuero.svg"
|
||||||
|
|
||||||
|
|
||||||
######################### Portfolio ###############################
|
######################### Portfolio ###############################
|
||||||
|
|
@ -34,18 +49,18 @@ portfolio:
|
||||||
enable: true
|
enable: true
|
||||||
bg_image: "images/amperion_letters_color.webp"
|
bg_image: "images/amperion_letters_color.webp"
|
||||||
title: "Wir entwickeln die Energiezukunft"
|
title: "Wir entwickeln die Energiezukunft"
|
||||||
content: " TEXT "
|
content: "Referenzen aus Planung, Netzzutritt und Projektmanagement – von PV-Dachanlagen über Speicherintegration bis zur Ladeinfrastruktur. Nachhaltig, normkonform und wirtschaftlich."
|
||||||
button:
|
button:
|
||||||
enable: true
|
enable: true
|
||||||
label: "Projekte"
|
label: "Projekte"
|
||||||
link: "project/"
|
link: "project/"
|
||||||
|
|
||||||
|
|
||||||
############################# Service ############################
|
############################# Service ############################
|
||||||
service:
|
service:
|
||||||
enable: true
|
enable: true
|
||||||
# service content comes from "service.md" file
|
# service content comes from "service.md" file
|
||||||
|
|
||||||
|
|
||||||
############################# facts ###############################
|
############################# facts ###############################
|
||||||
facts:
|
facts:
|
||||||
enable: true
|
enable: true
|
||||||
|
|
@ -56,9 +71,6 @@ facts:
|
||||||
name: "Ingenieurbuero"
|
name: "Ingenieurbuero"
|
||||||
count: "200"
|
count: "200"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
testimonial_slider:
|
testimonial_slider:
|
||||||
# testimonial item loop
|
# testimonial item loop
|
||||||
- name: ""
|
- name: ""
|
||||||
|
|
@ -78,7 +90,6 @@ facts:
|
||||||
designation: ""
|
designation: ""
|
||||||
content: ""
|
content: ""
|
||||||
|
|
||||||
|
|
||||||
cta:
|
cta:
|
||||||
enable: true
|
enable: true
|
||||||
title: "Kostenlose Erstberatung sichern!"
|
title: "Kostenlose Erstberatung sichern!"
|
||||||
|
|
@ -86,5 +97,4 @@ cta:
|
||||||
accent: "Jetzt Kontakt aufnehmen!"
|
accent: "Jetzt Kontakt aufnehmen!"
|
||||||
email_button_text: "E-Mail senden"
|
email_button_text: "E-Mail senden"
|
||||||
phone_button_text: "Anrufen"
|
phone_button_text: "Anrufen"
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ title: "Wir sind AMPERION"
|
||||||
bg_image: ""
|
bg_image: ""
|
||||||
layout: "about"
|
layout: "about"
|
||||||
draft: false
|
draft: false
|
||||||
|
meta_title: "Über AMPERION | Ingenieurbüro"
|
||||||
|
meta_description: "Ingenieurbüro für PV, Ladeinfrastruktur und Energiespeicher – unabhängige Beratung, Normenkompetenz und Netzbetreiber-Erfahrung."
|
||||||
|
|
||||||
intro_section:
|
intro_section:
|
||||||
enable: true
|
enable: true
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
---
|
---
|
||||||
|
meta_title: "AGB | AMPERION"
|
||||||
|
meta_description: "Allgemeine Geschäftsbedingungen: Geltungsbereich, Angebote, Leistungen, Haftung, Gewährleistung, Zahlungs- und Vertragsbedingungen."
|
||||||
|
robots: "noindex,follow"
|
||||||
title: "Allgemeine Geschäftsbedingungen"
|
title: "Allgemeine Geschäftsbedingungen"
|
||||||
description: ""
|
description: ""
|
||||||
subtitle : ""
|
subtitle : ""
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,10 @@ bg_image: ""
|
||||||
layout: "contact"
|
layout: "contact"
|
||||||
draft: false
|
draft: false
|
||||||
|
|
||||||
|
# SEO
|
||||||
|
meta_title: "Kontakt & Projektanfrage | AMPERION"
|
||||||
|
meta_description: "Rückmeldung innerhalb von 24 Stunden. Jetzt Projekt anfragen – Photovoltaik, Speicher, Ladeinfrastruktur."
|
||||||
|
|
||||||
############################# call to action #################################
|
############################# call to action #################################
|
||||||
cta:
|
cta:
|
||||||
enable : true
|
enable : true
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
---
|
---
|
||||||
|
meta_title: "Datenschutz | AMPERION"
|
||||||
|
meta_description: "Informationen zum Datenschutz gemäß DSGVO: Verantwortlicher, Zwecke, Rechtsgrundlagen, Speicherdauer, Betroffenenrechte, Kontakt."
|
||||||
|
robots: "noindex,follow"
|
||||||
title: "Datenschutz"
|
title: "Datenschutz"
|
||||||
description: ""
|
description: ""
|
||||||
subtitle : ""
|
subtitle : ""
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
---
|
---
|
||||||
|
meta_title: "Impressum | AMPERION"
|
||||||
|
meta_description: "Angaben gemäß ECG: AMPERION GmbH – Kontakt, Firmenbuch, UID, zuständige Behörde und weitere Pflichtangaben."
|
||||||
|
# robots: "index,follow" # optional; Standard ist ohnehin index,follow
|
||||||
title: "Impressum"
|
title: "Impressum"
|
||||||
layout: "impressum"
|
layout: "impressum"
|
||||||
bg_image: "images/module_reflection_2.webp"
|
bg_image: "images/module_reflection_2.webp"
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ og_image: "/images/karriere/karriere_hero.webp"
|
||||||
date: 2025-01-01
|
date: 2025-01-01
|
||||||
draft: false
|
draft: false
|
||||||
|
|
||||||
|
# SEO
|
||||||
|
meta_title: "Karriere: Jobs in PV, Ladeinfrastruktur & Speicher | AMPERION"
|
||||||
|
meta_description: "Jobs für Elektrotechnik & Energie: PV, Ladeinfrastruktur & Speicher. Flexible Arbeitszeiten, Weiterbildung, Hybrid/Remote. Jetzt bewerben oder initiativ."
|
||||||
|
|
||||||
hero:
|
hero:
|
||||||
title: "Karriere bei AMPERION"
|
title: "Karriere bei AMPERION"
|
||||||
|
|
@ -35,5 +38,4 @@ cta:
|
||||||
cta_text: "Gestalte die Energiewende mit uns."
|
cta_text: "Gestalte die Energiewende mit uns."
|
||||||
cta_label: "Jetzt bewerben"
|
cta_label: "Jetzt bewerben"
|
||||||
cta_href: "/contact/"
|
cta_href: "/contact/"
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -1,23 +1,16 @@
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
PROJECT: Startup Hugo
|
PROJECT: Startup Hugo
|
||||||
VERSION: 1.0.0
|
VERSION: 1.0.0
|
||||||
AUTHOR: Gethugothemes
|
AUTHOR: Gethugothemes
|
||||||
AUTHOR WEBSITE: https://gethugothemes.com
|
AUTHOR WEBSITE: https://gethugothemes.com
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="{{ site.LanguageCode | default `en-US` }}" itemscope itemtype="http://schema.org/WebPage">
|
<html lang="{{ site.LanguageCode | default `de-AT` }}" itemscope itemtype="http://schema.org/WebPage">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
{{ partial "head.html" . }}
|
{{ partial "head.html" . }}
|
||||||
|
<!-- WICHTIG: kein weiterer <meta name="viewport"> hier; ist bereits in head.html enthalten -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Meta Viewport Tag hinzufügen -->
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
|
|
||||||
<!-- cache partial only in production -->
|
<!-- cache partial only in production -->
|
||||||
{{ if hugo.IsProduction }}
|
{{ if hugo.IsProduction }}
|
||||||
|
|
@ -25,12 +18,6 @@ AUTHOR WEBSITE: https://gethugothemes.com
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ partial "style.html" . }}
|
{{ partial "style.html" . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
@ -42,18 +29,10 @@ AUTHOR WEBSITE: https://gethugothemes.com
|
||||||
{{ partial "preloader.html" . }}
|
{{ partial "preloader.html" . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
{{ block "main" . }}{{ end }}
|
{{ block "main" . }}{{ end }}
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- cache partial only in production -->
|
<!-- cache partial only in production -->
|
||||||
{{ if hugo.IsProduction }}
|
{{ if hugo.IsProduction }}
|
||||||
{{ partialCached "footer.html" . }}
|
{{ partialCached "footer.html" . }}
|
||||||
|
|
@ -62,10 +41,6 @@ AUTHOR WEBSITE: https://gethugothemes.com
|
||||||
{{ partial "footer.html" . }}
|
{{ partial "footer.html" . }}
|
||||||
{{ partial "script.html" . }}
|
{{ partial "script.html" . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
13
layouts/_default/default.html
Normal file
13
layouts/_default/default.html
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
{{ partial "page-title.html" . }}
|
||||||
|
|
||||||
|
<section class="page-wrapper">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{{ .Content }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{{ end }}
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
|
{{ partial "breadcrumbs.html" . }}
|
||||||
{{ partial "page-title.html" . }}
|
{{ partial "page-title.html" . }}
|
||||||
|
|
||||||
|
|
||||||
{{/* ==== BILDER SAMMELN (Front-Matter oder Auto-Discovery) ==== */}}
|
{{/* ==== BILDER SAMMELN (Front-Matter oder Auto-Discovery) ==== */}}
|
||||||
{{ $photos := .Params.images }}
|
{{ $photos := .Params.images }}
|
||||||
{{ if not $photos }}
|
{{ if not $photos }}
|
||||||
|
|
@ -113,7 +115,7 @@
|
||||||
<img src='{{ .src | default . | relURL }}'
|
<img src='{{ .src | default . | relURL }}'
|
||||||
alt='{{ .alt | default $.Title }}'
|
alt='{{ .alt | default $.Title }}'
|
||||||
width="1200" height="800"
|
width="1200" height="800"
|
||||||
loading="eager" decoding="async" class="img-fluid">
|
loading="eager" decoding="async" fetchpriority="high" class="img-fluid">
|
||||||
</figure>
|
</figure>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -430,7 +432,7 @@
|
||||||
{{ $totalFeatures := len $features }}
|
{{ $totalFeatures := len $features }}
|
||||||
|
|
||||||
<div class="sf-carousel" id="sfCarousel">
|
<div class="sf-carousel" id="sfCarousel">
|
||||||
<h2 class="sf-title">Unsere Leistungen</h2>
|
<h3 class="sf-title">Unsere Leistungen</h3>
|
||||||
|
|
||||||
<button class="sf-arrow prev" aria-label="Vorherige Leistung">
|
<button class="sf-arrow prev" aria-label="Vorherige Leistung">
|
||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
|
||||||
|
|
@ -677,7 +679,7 @@
|
||||||
|
|
||||||
<!-- Text links -->
|
<!-- Text links -->
|
||||||
<div class="col-lg-6" data-reveal>
|
<div class="col-lg-6" data-reveal>
|
||||||
<h2 class="mb-3">Ergebnis & Mehrwert</h2>
|
<h3 class="mb-3">Ergebnis & Mehrwert</h3>
|
||||||
<ul class="checklist">
|
<ul class="checklist">
|
||||||
{{ range . }}
|
{{ range . }}
|
||||||
<li data-reveal>
|
<li data-reveal>
|
||||||
|
|
@ -713,6 +715,8 @@
|
||||||
</section>
|
</section>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
{{ partial "related.html" . }}
|
||||||
|
|
||||||
|
|
||||||
<!-- =========================
|
<!-- =========================
|
||||||
CTA (animierter Hintergrund wie auf Index),
|
CTA (animierter Hintergrund wie auf Index),
|
||||||
|
|
@ -755,13 +759,13 @@
|
||||||
|
|
||||||
<div class="cta__social">
|
<div class="cta__social">
|
||||||
<a class="cta__social-link" href="https://www.instagram.com/amperion.at/" target="_blank" rel="noopener" aria-label="Instagram">
|
<a class="cta__social-link" href="https://www.instagram.com/amperion.at/" target="_blank" rel="noopener" aria-label="Instagram">
|
||||||
<img src="/images/social/instagram.svg" alt="">
|
<img src="/images/social/instagram.svg" alt="" role="presentation" aria-hidden="true">
|
||||||
</a>
|
</a>
|
||||||
<a class="cta__social-link" href="https://www.linkedin.com/company/amperion-gmbh/" target="_blank" rel="noopener" aria-label="LinkedIn">
|
<a class="cta__social-link" href="https://www.linkedin.com/company/amperion-gmbh/" target="_blank" rel="noopener" aria-label="LinkedIn">
|
||||||
<img src="/images/social/linkedin.svg" alt="">
|
<img src="/images/social/linkedin.svg" alt="" role="presentation" aria-hidden="true">
|
||||||
</a>
|
</a>
|
||||||
<a class="cta__social-link" href="https://www.facebook.com/share/1CZ7xm6cdw/?mibextid=wwXIfr" target="_blank" rel="noopener" aria-label="Facebook">
|
<a class="cta__social-link" href="https://www.facebook.com/share/1CZ7xm6cdw/?mibextid=wwXIfr" target="_blank" rel="noopener" aria-label="Facebook">
|
||||||
<img src="/images/social/facebook.svg" alt="">
|
<img src="/images/social/facebook.svg" alt="" role="presentation" aria-hidden="true">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
|
{{ partial "breadcrumbs.html" . }}
|
||||||
{{ partial "page-title.html" . }}
|
{{ partial "page-title.html" . }}
|
||||||
|
|
||||||
<!-- checking blog -->
|
<!-- checking blog -->
|
||||||
|
|
@ -9,17 +9,29 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
|
||||||
{{ $paginator := .Paginate .Data.Pages -}}
|
{{ $paginator := .Paginate .Data.Pages -}}
|
||||||
{{ range $paginator.Pages -}}
|
{{ range $paginator.Pages -}}
|
||||||
<div class="post">
|
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
|
||||||
<div class="post-media post-thumb">
|
<div class="post-media post-thumb">
|
||||||
{{ if isset .Params "image" -}}
|
{{ with .Params.image -}}
|
||||||
<a href="{{ .RelPermalink }}">
|
<a href="{{ $.RelPermalink }}" rel="bookmark">
|
||||||
<img src="{{ .Params.image | relURL }}" alt="{{ .Title }}">
|
{{ partial "img.html" (dict
|
||||||
|
"src" .
|
||||||
|
"alt" $.Title
|
||||||
|
"class" "img-responsive"
|
||||||
|
"loading" "lazy"
|
||||||
|
"page" $
|
||||||
|
) }}
|
||||||
</a>
|
</a>
|
||||||
{{- end }}
|
{{- end }}
|
||||||
</div>
|
</div>
|
||||||
<h3 class="post-title"><a href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
|
|
||||||
|
|
||||||
|
<h3 class="post-title" itemprop="headline">
|
||||||
|
<a href="{{ .RelPermalink }}" rel="bookmark">{{ .Title }}</a>
|
||||||
|
</h3>
|
||||||
|
|
||||||
<div class="post-meta">
|
<div class="post-meta">
|
||||||
<ul>
|
<ul>
|
||||||
<li><i class="fas fa-calendar-week"></i> {{ time.Format ":date_long" .PublishDate }}</li>
|
<li><i class="fas fa-calendar-week"></i> {{ time.Format ":date_long" .PublishDate }}</li>
|
||||||
|
|
@ -33,11 +45,12 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="post-content">
|
<div class="post-content">
|
||||||
<p>{{ .Summary }}</p>
|
<p itemprop="description">{{ .Summary }}</p>
|
||||||
<a href="{{ .RelPermalink }}" class="btn btn-main">{{ i18n "read_more" }}</a>
|
<a href="{{ .RelPermalink }}" class="btn btn-main" rel="bookmark">{{ i18n "read_more" }}</a>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</article>
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
<!-- pagination -->
|
<!-- pagination -->
|
||||||
|
|
@ -47,61 +60,55 @@
|
||||||
{{ $lower_limit := (add $adjacent_links 1) -}}
|
{{ $lower_limit := (add $adjacent_links 1) -}}
|
||||||
{{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) -}}
|
{{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) -}}
|
||||||
{{ if gt $paginator.TotalPages 1 -}}
|
{{ if gt $paginator.TotalPages 1 -}}
|
||||||
<nav class="text-center">
|
<nav class="text-center" aria-label="Blog pagination">
|
||||||
<ul class="pagination post-pagination">
|
<ul class="pagination post-pagination">
|
||||||
<!-- Previous page. -->
|
<!-- Previous page. -->
|
||||||
{{ if $paginator.HasPrev -}}
|
{{ if $paginator.HasPrev -}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ $paginator.Prev.URL }}" class="page-link">{{ i18n "page_prev" }}</a>
|
<a href="{{ $paginator.Prev.URL }}" class="page-link" rel="prev">{{ i18n "page_prev" }}</a>
|
||||||
</li>
|
</li>
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
<!-- Page numbers. -->
|
<!-- Page numbers. -->
|
||||||
{{ range $paginator.Pagers -}}
|
{{ range $paginator.Pagers -}}
|
||||||
{{ $page_number_flag := false -}}
|
{{ $page_number_flag := false -}}
|
||||||
<!-- Advanced page numbers. -->
|
|
||||||
{{ if gt $paginator.TotalPages $max_links -}}
|
{{ if gt $paginator.TotalPages $max_links -}}
|
||||||
<!-- Lower limit pages. -->
|
|
||||||
<!-- If the user is on a page which is in the lower limit. -->
|
|
||||||
{{ if le $paginator.PageNumber $lower_limit -}}
|
{{ if le $paginator.PageNumber $lower_limit -}}
|
||||||
<!-- If the current loop page is less than max_links. -->
|
|
||||||
{{ if le .PageNumber $max_links -}}
|
{{ if le .PageNumber $max_links -}}
|
||||||
{{ $page_number_flag = true -}}
|
{{ $page_number_flag = true -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
<!-- Upper limit pages. -->
|
|
||||||
<!-- If the user is on a page which is in the upper limit. -->
|
|
||||||
{{ else if ge $paginator.PageNumber $upper_limit -}}
|
{{ else if ge $paginator.PageNumber $upper_limit -}}
|
||||||
<!-- If the current loop page is greater than total pages minus $max_links -->
|
|
||||||
{{ if gt .PageNumber (sub $paginator.TotalPages $max_links) -}}
|
{{ if gt .PageNumber (sub $paginator.TotalPages $max_links) -}}
|
||||||
{{ $page_number_flag = true -}}
|
{{ $page_number_flag = true -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
<!-- Middle pages. -->
|
|
||||||
{{ else -}}
|
{{ else -}}
|
||||||
{{ if and (ge .PageNumber (sub $paginator.PageNumber $adjacent_links)) (le .PageNumber (add $paginator.PageNumber $adjacent_links)) -}}
|
{{ if and (ge .PageNumber (sub $paginator.PageNumber $adjacent_links)) (le .PageNumber (add $paginator.PageNumber $adjacent_links)) -}}
|
||||||
{{ $page_number_flag = true -}}
|
{{ $page_number_flag = true -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
<!-- Simple page numbers. -->
|
|
||||||
{{ else -}}
|
{{ else -}}
|
||||||
{{ $page_number_flag = true -}}
|
{{ $page_number_flag = true -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
<!-- Output page numbers. -->
|
|
||||||
{{ if eq $page_number_flag true -}}
|
{{ if eq $page_number_flag true -}}
|
||||||
<li class="{{ if eq . $paginator }} active {{ end }}">
|
<li class="{{ if eq . $paginator }} active {{ end }}">
|
||||||
<a href="{{ .URL }}">
|
<a href="{{ .URL }}" {{ if eq . $paginator }}aria-current="page"{{ end }}>
|
||||||
{{ .PageNumber }}
|
{{ .PageNumber }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
<!-- Next page. -->
|
<!-- Next page. -->
|
||||||
{{ if $paginator.HasNext -}}
|
{{ if $paginator.HasNext -}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ $paginator.Next.URL }}">{{ i18n "page_next" }}</a>
|
<a href="{{ $paginator.Next.URL }}" rel="next">{{ i18n "page_next" }}</a>
|
||||||
</li>
|
</li>
|
||||||
{{- end }}
|
{{- end }}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
{{ partial "blog-sidebar.html" . }}
|
{{ partial "blog-sidebar.html" . }}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
|
{{ partial "breadcrumbs.html" . }}
|
||||||
{{ partial "page-title.html" . }}
|
{{ partial "page-title.html" . }}
|
||||||
|
|
||||||
|
|
||||||
<!-- checking blog -->
|
<!-- checking blog -->
|
||||||
{{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") (eq .Section "categories") (eq .Section "tags") }}
|
{{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") (eq .Section "categories") (eq .Section "tags") }}
|
||||||
|
|
||||||
|
|
@ -26,12 +27,25 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="post-thumb">
|
<div class="post-thumb">
|
||||||
{{ with .Params.image -}}
|
{{ with .Params.image -}}
|
||||||
<img class="img-responsive" src="{{ . | relURL }}" alt="{{ $.Title }}">
|
{{ $img := . }}
|
||||||
|
{{ $static := printf "static/%s" (strings.TrimLeft "/" $img) }}
|
||||||
|
{{ $w := 0 }}{{ $h := 0 }}
|
||||||
|
{{ if fileExists $static }}
|
||||||
|
{{ with (imageConfig $static) }}{{ $w = .Width }}{{ $h = .Height }}{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
<img class="img-responsive"
|
||||||
|
src="{{ $img | relURL }}"
|
||||||
|
alt="{{ $.Title | plainify }}"
|
||||||
|
loading="lazy"
|
||||||
|
decoding="async"
|
||||||
|
{{ if gt $w 0 }}width="{{ $w }}"{{ end }}
|
||||||
|
{{ if gt $h 0 }}height="{{ $h }}"{{ end }}>
|
||||||
{{- end }}
|
{{- end }}
|
||||||
</div>
|
</div>
|
||||||
<div class="post-content post-excerpt">
|
<div class="post-content post-excerpt">
|
||||||
{{ .Content }}
|
{{ .Content }}
|
||||||
</div>
|
</div>
|
||||||
|
{{ partial "related.html" . }}
|
||||||
{{ with site.Params.DisqusShortname -}}
|
{{ with site.Params.DisqusShortname -}}
|
||||||
<div class="post-comments">
|
<div class="post-comments">
|
||||||
{{ template "_internal/disqus.html" . }}
|
{{ template "_internal/disqus.html" . }}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
style="min-height: 100vh; display: flex; align-items: center; justify-content: center; position: relative;">
|
style="min-height: 100vh; display: flex; align-items: center; justify-content: center; position: relative;">
|
||||||
<div class="my-container" style="position: relative; z-index: 2;">
|
<div class="my-container" style="position: relative; z-index: 2;">
|
||||||
|
|
||||||
|
|
||||||
<!-- Logo-Zeile mit zwei Frames -->
|
<!-- Logo-Zeile mit zwei Frames -->
|
||||||
<div class="logo-container">
|
<div class="logo-container">
|
||||||
<div class="frame1">
|
<div class="frame1">
|
||||||
|
|
@ -20,7 +21,7 @@
|
||||||
<!-- Haupttitel + Button -->
|
<!-- Haupttitel + Button -->
|
||||||
<div class="hero-section" style="margin-top: 10rem;">
|
<div class="hero-section" style="margin-top: 10rem;">
|
||||||
{{ with .title }}
|
{{ with .title }}
|
||||||
<h2 class="hero-title fade-in-title">{{ . | markdownify }}</h2>
|
<h1 class="hero-title fade-in-title" itemprop="headline">{{ . | markdownify }}</h1>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ with .button }}
|
{{ with .button }}
|
||||||
{{ if .enable }}
|
{{ if .enable }}
|
||||||
|
|
@ -136,6 +137,7 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
<!-- DARUM AMPERION -->
|
<!-- DARUM AMPERION -->
|
||||||
<section class="whyamperion section">
|
<section class="whyamperion section">
|
||||||
<div class="container my-container">
|
<div class="container my-container">
|
||||||
|
|
@ -314,13 +316,13 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
|
||||||
<div class="cta__social">
|
<div class="cta__social">
|
||||||
<a class="cta__social-link" href="https://www.instagram.com/amperion.at/" target="_blank" rel="noopener" aria-label="Instagram">
|
<a class="cta__social-link" href="https://www.instagram.com/amperion.at/" target="_blank" rel="noopener" aria-label="Instagram">
|
||||||
<img src="/images/social/instagram.svg" alt="">
|
<img src="/images/social/instagram.svg" alt="" role="presentation" aria-hidden="true">
|
||||||
</a>
|
</a>
|
||||||
<a class="cta__social-link" href="https://www.linkedin.com/company/amperion-gmbh/" target="_blank" rel="noopener" aria-label="LinkedIn">
|
<a class="cta__social-link" href="https://www.linkedin.com/company/amperion-gmbh/" target="_blank" rel="noopener" aria-label="LinkedIn">
|
||||||
<img src="/images/social/linkedin.svg" alt="">
|
<img src="/images/social/linkedin.svg" alt="" role="presentation" aria-hidden="true">
|
||||||
</a>
|
</a>
|
||||||
<a class="cta__social-link" href="https://www.facebook.com/share/1CZ7xm6cdw/?mibextid=wwXIfr" target="_blank" rel="noopener" aria-label="Facebook">
|
<a class="cta__social-link" href="https://www.facebook.com/share/1CZ7xm6cdw/?mibextid=wwXIfr" target="_blank" rel="noopener" aria-label="Facebook">
|
||||||
<img src="/images/social/facebook.svg" alt="">
|
<img src="/images/social/facebook.svg" alt="" role="presentation" aria-hidden="true">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
86
layouts/partials/breadcrumbs.html
Normal file
86
layouts/partials/breadcrumbs.html
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
{{/* Breadcrumbs mit Microdata + JSON-LD
|
||||||
|
- Zeigt nichts auf der Startseite
|
||||||
|
- Crumbs: Startseite → (Sektion/Kategorie) → Aktuelle Seite
|
||||||
|
- Sektionen werden auf DACH-taugliche Labels gemappt
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{ if not .IsHome }}
|
||||||
|
|
||||||
|
{{/* ------- Hilfsfunktionen/Labels ------- */}}
|
||||||
|
{{ $section := .Section | default "" }}
|
||||||
|
{{ $sectionLabel := "" }}
|
||||||
|
{{ if eq $section "leistungen" }}{{ $sectionLabel = "Leistungen" }}
|
||||||
|
{{ else if or (eq $section "post") (eq $section "posts") (eq $section "blog") (eq $section "blogs") (eq $section "news") }}{{ $sectionLabel = "Wissen" }}
|
||||||
|
{{ else if or (eq $section "fokusthemen") (eq $section "themen") }}{{ $sectionLabel = "Fokusthemen" }}
|
||||||
|
{{ else if eq $section "referenzen" }}{{ $sectionLabel = "Referenzen" }}
|
||||||
|
{{ else if .CurrentSection }}{{ $sectionLabel = .CurrentSection.Title }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ $crumbs := slice (dict "name" "Startseite" "url" ("/" | relURL)) }}
|
||||||
|
|
||||||
|
{{/* Sektion (falls vorhanden) */}}
|
||||||
|
{{ if $sectionLabel }}
|
||||||
|
{{ $secURL := cond .CurrentSection ( .CurrentSection.RelPermalink ) (printf "/%s/" $section | relURL) }}
|
||||||
|
{{ $crumbs = $crumbs | append (dict "name" $sectionLabel "url" $secURL ) }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{/* Optional: erste Kategorie als weiterer Crumb (außer sie wäre ident mit Sektion) */}}
|
||||||
|
{{ $cat := index .Params.categories 0 }}
|
||||||
|
{{ if and $cat (ne (lower $cat) (lower $sectionLabel)) }}
|
||||||
|
{{ $catPage := site.GetPage (printf "/categories/%s" (urlize $cat)) }}
|
||||||
|
{{ $catURL := cond $catPage $catPage.RelPermalink (printf "/categories/%s/" (urlize $cat) | relURL) }}
|
||||||
|
{{ $crumbs = $crumbs | append (dict "name" $cat "url" $catURL ) }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{/* Aktuelle Seite */}}
|
||||||
|
{{ $crumbs = $crumbs | append (dict "name" .Title "url" .RelPermalink) }}
|
||||||
|
|
||||||
|
<nav class="breadcrumbs container" aria-label="Brotkrumen" itemscope itemtype="https://schema.org/BreadcrumbList">
|
||||||
|
<ol>
|
||||||
|
{{ range $i, $c := $crumbs }}
|
||||||
|
{{ $pos := add $i 1 }}
|
||||||
|
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||||
|
{{ if lt $i (sub (len $crumbs) 1) }}
|
||||||
|
<a itemprop="item" href="{{ $c.url }}">
|
||||||
|
<span itemprop="name">{{ $c.name }}</span>
|
||||||
|
</a>
|
||||||
|
{{ else }}
|
||||||
|
<span itemprop="name" aria-current="page">{{ $c.name }}</span>
|
||||||
|
{{ end }}
|
||||||
|
<meta itemprop="position" content="{{ $pos }}" />
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "BreadcrumbList",
|
||||||
|
"itemListElement": [
|
||||||
|
{{- range $i, $c := $crumbs -}}
|
||||||
|
{{- if $i }},{{ end -}}
|
||||||
|
{
|
||||||
|
"@type": "ListItem",
|
||||||
|
"position": {{ add $i 1 }},
|
||||||
|
"name": {{ $c.name | jsonify }},
|
||||||
|
"item": {{ (absURL $c.url) | jsonify }}
|
||||||
|
}
|
||||||
|
{{- end -}}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* Minimal-Styles; kollidiert nicht mit deinem Theme */
|
||||||
|
.breadcrumbs { font-size:.875rem; margin: 8px auto 0; }
|
||||||
|
.breadcrumbs ol { list-style:none; padding:0; margin:0; display:flex; flex-wrap:wrap; gap:.35rem; align-items:center }
|
||||||
|
.breadcrumbs li { color:#6b7280 } /* neutral-500 */
|
||||||
|
.breadcrumbs a { color:inherit; text-decoration:none }
|
||||||
|
.breadcrumbs a:hover { text-decoration:underline }
|
||||||
|
.breadcrumbs li::after { content:"/"; margin:0 .35rem; opacity:.5 }
|
||||||
|
.breadcrumbs li:last-child::after { content:"" }
|
||||||
|
@media (max-width: 768px) { .breadcrumbs { padding:0 16px } }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
{{ end }}
|
||||||
|
|
@ -1,14 +1,32 @@
|
||||||
{{ partial "seo.html" . }}
|
{{ partial "seo.html" . }}
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>{{.Title | default site.Title}}</title>
|
|
||||||
|
|
||||||
<!-- base url -->
|
<title>
|
||||||
|
{{- if .IsHome -}}
|
||||||
|
Ingenieurbüro für PV, Speicher & Ladeinfrastruktur | AMPERION
|
||||||
|
{{- else -}}
|
||||||
|
{{- with .Params.meta_title -}}
|
||||||
|
{{ . }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ .Title }} | AMPERION
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
</title>
|
||||||
|
|
||||||
|
<!-- base url (vom Theme genutzt, belassen) -->
|
||||||
{{ if or (eq site.BaseURL "/") (eq site.BaseURL "http://localhost:1313/") (eq site.BaseURL "http://examplesite.org/") (eq site.BaseURL "https://examplesite.org/") (eq site.BaseURL "http://examplesite.com/") (eq site.BaseURL "https://examplesite.com/")}}{{else}}
|
{{ if or (eq site.BaseURL "/") (eq site.BaseURL "http://localhost:1313/") (eq site.BaseURL "http://examplesite.org/") (eq site.BaseURL "https://examplesite.org/") (eq site.BaseURL "http://examplesite.com/") (eq site.BaseURL "https://examplesite.com/")}}{{else}}
|
||||||
<base href="{{ .Permalink }}">
|
<base href="{{ .Permalink }}">
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<!-- multilingual SEO optimizations -->
|
<!-- Canonical + self-referential hreflang -->
|
||||||
|
<link rel="canonical" href="{{ .Permalink }}">
|
||||||
|
<link rel="alternate" hreflang="{{ site.LanguageCode | default `de-AT` }}" href="{{ .Permalink }}">
|
||||||
|
{{ if not .IsTranslated }}
|
||||||
|
<link rel="alternate" hreflang="x-default" href="{{ .Permalink }}">
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<!-- Multilingual alternates -->
|
||||||
{{ if .IsTranslated }}
|
{{ if .IsTranslated }}
|
||||||
{{ range .AllTranslations }}
|
{{ range .AllTranslations }}
|
||||||
<link rel="alternate" hreflang="{{ .Lang }}" href="{{ .RelPermalink | absLangURL }}">
|
<link rel="alternate" hreflang="{{ .Lang }}" href="{{ .RelPermalink | absLangURL }}">
|
||||||
|
|
@ -16,72 +34,89 @@
|
||||||
<link rel="alternate" hreflang="x-default" href="{{ .RelPermalink | absLangURL }}">
|
<link rel="alternate" hreflang="x-default" href="{{ .RelPermalink | absLangURL }}">
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<!-- mobile responsive meta -->
|
<!-- Viewport: nur EIN Tag -->
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="description" content="{{ .Params.Description | default site.Params.description }}">
|
|
||||||
{{ with site.Params.author }}
|
{{ with site.Params.author }}<meta name="author" content="{{ . }}">{{ end }}
|
||||||
<meta name="author" content="{{ . }}">{{ end }}
|
|
||||||
{{ hugo.Generator }}
|
{{ hugo.Generator }}
|
||||||
|
|
||||||
<!-- theme meta -->
|
<!-- Optional: manuelles Preload von Bildern pro Seite -->
|
||||||
|
{{ with .Params.preload_images }}
|
||||||
|
{{ range . }}
|
||||||
|
<link rel="preload" as="image" href="{{ . | relURL }}">
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ with .Params.robots }}<meta name="robots" content="{{ . }}">{{ end }}
|
||||||
|
|
||||||
|
<!-- Theme / Manifest / Favicons -->
|
||||||
<meta name="theme-name" content="airspace-hugo" />
|
<meta name="theme-name" content="airspace-hugo" />
|
||||||
|
|
||||||
<!-- favicon -->
|
|
||||||
{{ $favicon := site.Params.favicon }}
|
{{ $favicon := site.Params.favicon }}
|
||||||
{{ if $favicon }}
|
{{ if $favicon }}
|
||||||
{{ if fileExists (add `assets/` $favicon) }}
|
{{ if fileExists (add `assets/` $favicon) }}
|
||||||
{{ $favicon:= resources.Get $favicon }}
|
{{ $fav := resources.Get $favicon }}
|
||||||
{{ $favicon_16:= $favicon.Resize "16x png"}}
|
{{ $f16 := $fav.Resize "16x png" }}
|
||||||
{{ $favicon_32:= $favicon.Resize "32x png"}}
|
{{ $f32 := $fav.Resize "32x png" }}
|
||||||
{{ $favicon_180:= $favicon.Resize "180x png"}}
|
{{ $f180 := $fav.Resize "180x png" }}
|
||||||
<link rel="shortcut icon" href="{{$favicon_32.RelPermalink}}" type="image/x-icon">
|
<link rel="shortcut icon" href="{{ $f32.RelPermalink }}" type="image/x-icon">
|
||||||
<link rel="icon" href="{{$favicon_32.RelPermalink}}" type="image/x-icon">
|
<link rel="icon" href="{{ $f32.RelPermalink }}" type="image/x-icon">
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="{{$favicon_16.RelPermalink}}">
|
<link rel="icon" type="image/png" sizes="16x16" href="{{ $f16.RelPermalink }}">
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="{{$favicon_32.RelPermalink}}">
|
<link rel="icon" type="image/png" sizes="32x32" href="{{ $f32.RelPermalink }}">
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="{{$favicon_180.RelPermalink}}">
|
<link rel="apple-touch-icon" sizes="180x180" href="{{ $f180.RelPermalink }}">
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
<link rel="manifest" href="{{ `manifest.webmanifest` | relLangURL }}">
|
<link rel="manifest" href="{{ `manifest.webmanifest` | relLangURL }}">
|
||||||
<meta name="msapplication-TileColor" content="{{ site.Params.variables.color_primary | default `#da532c` }}">
|
<meta name="msapplication-TileColor" content="{{ site.Params.variables.color_primary | default `#da532c` }}">
|
||||||
<meta name="theme-color" content="{{ site.Params.variables.body_color | default `#ffffff` }}">
|
<meta name="theme-color" content="{{ site.Params.variables.body_color | default `#ffffff` }}">
|
||||||
|
|
||||||
<!-- Open Graph image and Twitter Card meta-data -->
|
<!-- OG/Twitter: Bild + Maße + Card (einheitlich, ohne Duplikate) -->
|
||||||
{{ $image_path := .Params.image | default site.Params.image }}
|
{{ $image_path := .Params.image | default site.Params.image }}
|
||||||
{{ $image_path_local := printf "assets/%s" $image_path }}
|
{{ $image_path_local := printf "assets/%s" $image_path }}
|
||||||
{{ $image_ext := trim (path.Ext $image_path | lower) "." }}
|
{{ $image_ext := trim (path.Ext $image_path | lower) "." }}
|
||||||
|
|
||||||
|
{{/* Titel & Beschreibung für OG/Twitter */}}
|
||||||
|
{{ $ogt := cond .IsHome "Ingenieurbüro für PV, Speicher & Ladeinfrastruktur | AMPERION" (cond .Params.meta_title .Params.meta_title (printf "%s | AMPERION" .Title)) }}
|
||||||
|
{{ $desc := .Params.meta_description | default site.Params.description }}
|
||||||
|
|
||||||
|
{{ $isArticle := in (slice "post" "posts" "blog" "blogs" "news") .Section }}
|
||||||
|
<meta property="og:type" content="{{ if $isArticle }}article{{ else }}website{{ end }}">
|
||||||
|
<meta property="og:url" content="{{ .Permalink }}">
|
||||||
|
<meta property="og:title" content="{{ $ogt }}">
|
||||||
|
{{ with $desc }}<meta property="og:description" content="{{ . | plainify }}">{{ end }}
|
||||||
|
|
||||||
{{ if fileExists $image_path_local }}
|
{{ if fileExists $image_path_local }}
|
||||||
<meta property="og:image" content="{{ $image_path | absURL }}" />
|
<meta property="og:image" content="{{ $image_path | absURL }}">
|
||||||
<!-- If not SVG, read image aspect ratio and define Twitter Card and Open Graph width and height -->
|
|
||||||
{{ if ne $image_ext "svg" }}
|
{{ if ne $image_ext "svg" }}
|
||||||
{{ with (imageConfig $image_path_local) }}
|
{{ with (imageConfig $image_path_local) }}
|
||||||
{{ if (and (gt .Width 144) (gt .Height 144)) }}
|
{{ if (and (gt .Width 144) (gt .Height 144)) }}
|
||||||
<meta name="twitter:image" content="{{ $image_path | absURL }}" />
|
<meta name="twitter:image" content="{{ $image_path | absURL }}">
|
||||||
<meta name="twitter:card"
|
|
||||||
content="summary{{ if (and (gt .Width 300) (gt .Height 157) (not (eq .Width .Height))) }}_large_image{{ end }}">
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
<meta property="og:image:width" content="{{ .Width }}">
|
<meta property="og:image:width" content="{{ .Width }}">
|
||||||
<meta property="og:image:height" content="{{ .Height }}">
|
<meta property="og:image:height" content="{{ .Height }}">
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ template "_internal/opengraph.html" . }}
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="twitter:title" content="{{ $ogt }}">
|
||||||
|
{{ with $desc }}<meta name="twitter:description" content="{{ . | plainify }}">{{ end }}
|
||||||
|
|
||||||
<!-- AOS Animation CSS -->
|
<!-- AOS CSS + Bootstrap (defer) -->
|
||||||
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
|
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css">
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" defer></script>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" defer></script>
|
||||||
|
|
||||||
<!-- Hugo SCSS Pipeline mit Template-Parsing -->
|
<!-- Styles: werden über partial "style.html" eingebunden (nicht hier erneut) -->
|
||||||
{{- $scss := resources.Get "scss/style.scss" | resources.ExecuteAsTemplate "scss/style.scss" . | toCSS (dict "targetPath" "css/style.css") | minify -}}
|
|
||||||
<link rel="stylesheet" href="{{ $scss.RelPermalink }}">
|
|
||||||
|
|
||||||
|
<!-- Strukturierte Daten: Organization -->
|
||||||
|
{{ if templates.Exists "partials/ld-org.html" }}
|
||||||
|
{{ partial "ld-org.html" . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
|
||||||
<!-- Matomo -->
|
<!-- Matomo -->
|
||||||
<script>
|
<script>
|
||||||
var _paq = window._paq = window._paq || [];
|
var _paq = window._paq = window._paq || [];
|
||||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
|
||||||
_paq.push(['trackPageView']);
|
_paq.push(['trackPageView']);
|
||||||
_paq.push(['enableLinkTracking']);
|
_paq.push(['enableLinkTracking']);
|
||||||
(function() {
|
(function() {
|
||||||
|
|
@ -92,4 +127,4 @@
|
||||||
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<!-- End Matomo Code -->
|
<!-- End Matomo -->
|
||||||
|
|
|
||||||
26
layouts/partials/img.html
Normal file
26
layouts/partials/img.html
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
{{/* Re-usable image partial with alt + size fallback
|
||||||
|
Usage:
|
||||||
|
{{ partial "img.html" (dict "src" "/images/foo.webp" "alt" "Kurzbeschreibung" "class" "img-fluid" "loading" "lazy" "page" .) }}
|
||||||
|
*/}}
|
||||||
|
{{- $src := .src -}}
|
||||||
|
{{- $alt := .alt | default .page.Title -}}
|
||||||
|
{{- $class := .class -}}
|
||||||
|
{{- $loading := .loading | default "lazy" -}}
|
||||||
|
|
||||||
|
{{- $w := 0 -}}
|
||||||
|
{{- $h := 0 -}}
|
||||||
|
{{- $static := printf "static/%s" (strings.TrimLeft "/" $src) -}}
|
||||||
|
{{- if fileExists $static -}}
|
||||||
|
{{- with (imageConfig $static) -}}
|
||||||
|
{{- $w = .Width -}}
|
||||||
|
{{- $h = .Height -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<img src="{{ $src | relURL }}"
|
||||||
|
alt="{{ $alt | plainify }}"
|
||||||
|
loading="{{ $loading }}"
|
||||||
|
decoding="async"
|
||||||
|
{{ if gt $w 0 }}width="{{ $w }}"{{ end }}
|
||||||
|
{{ if gt $h 0 }}height="{{ $h }}"{{ end }}
|
||||||
|
class="{{ $class }}">
|
||||||
26
layouts/partials/ld-org.html
Normal file
26
layouts/partials/ld-org.html
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
{{- /* Organization JSON-LD — robust, nur Felder ausgeben, die vorhanden sind */ -}}
|
||||||
|
{{- $logo := site.Params.logo | default site.Params.favicon | default site.Params.image | default "images/logo.webp" -}}
|
||||||
|
{{- $email := site.Params.email | default "" -}}
|
||||||
|
{{- $phone := site.Params.phone1 | default site.Params.phone | default "" -}}
|
||||||
|
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "Organization",
|
||||||
|
"name": "AMPERION GmbH",
|
||||||
|
"url": {{ "/" | absURL | jsonify }},
|
||||||
|
"logo": {{ ($logo | relURL | absURL) | jsonify }},
|
||||||
|
"sameAs": [
|
||||||
|
"https://www.linkedin.com/company/amperion-gmbh/",
|
||||||
|
"https://www.instagram.com/amperion.at/",
|
||||||
|
"https://www.facebook.com/share/1CZ7xm6cdw/?mibextid=wwXIfr"
|
||||||
|
]{{ if or $email $phone }},
|
||||||
|
"contactPoint": [{
|
||||||
|
"@type": "ContactPoint",
|
||||||
|
"contactType": "customer service"{{ if $phone }},
|
||||||
|
"telephone": {{ $phone | jsonify }}{{ end }}{{ if $email }},
|
||||||
|
"email": {{ $email | jsonify }}{{ end }},
|
||||||
|
"areaServed": "AT"
|
||||||
|
}]{{ end }}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -81,15 +81,14 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
|
{{/* SEO: H1 steuerbar via .Params.h1, Fallback .Title; KEIN Untertitel mehr */}}
|
||||||
|
{{ $h1 := .Params.h1 | default .Title }}
|
||||||
<div class="container1">
|
<div class="container1">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 text-center">
|
<div class="col-md-12 text-center">
|
||||||
<div class="service-title">
|
<div class="service-title">
|
||||||
<h1 class="title-electric">{{ .Title }}</h1>
|
<h1 class="title-electric" itemprop="headline" data-text="{{ $h1 }}">{{ $h1 }}</h1>
|
||||||
</div>
|
</div>
|
||||||
{{ with .Params.description }}
|
|
||||||
<p class="page-title-desc">{{ . }}</p>
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
169
layouts/partials/related.html
Normal file
169
layouts/partials/related.html
Normal file
|
|
@ -0,0 +1,169 @@
|
||||||
|
{{/* related.html (Enhanced UI + robust image fallback) */}}
|
||||||
|
|
||||||
|
{{ if not .IsHome }}
|
||||||
|
{{ $page := . }}
|
||||||
|
{{ $max := .Params.related_max | default 4 }}
|
||||||
|
{{ $tags := .Params.tags | default (slice) }}
|
||||||
|
{{ $exclude := .Params.related_exclude | default (slice) }}
|
||||||
|
{{ $manual := .Params.related_manual | default (slice) }}
|
||||||
|
{{ $pages := slice }}
|
||||||
|
|
||||||
|
{{/* Manuelle Auswahl? */}}
|
||||||
|
{{ if gt (len $manual) 0 }}
|
||||||
|
{{ range $manual }}
|
||||||
|
{{ $p := site.GetPage . }}
|
||||||
|
{{ if not $p }}{{ $p = site.GetPage (printf "/%s" (strings.TrimPrefix "/" .)) }}{{ end }}
|
||||||
|
{{ if $p }}{{ $pages = $pages | append $p }}{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ $pages = first $max $pages }}
|
||||||
|
{{ else }}
|
||||||
|
{{/* Automatisch */}}
|
||||||
|
{{ $recs := slice }}
|
||||||
|
{{ range site.RegularPages }}
|
||||||
|
{{ if or
|
||||||
|
(eq .RelPermalink $page.RelPermalink)
|
||||||
|
(in (slice "impressum" "datenschutz" "agb" "privacy") .Section)
|
||||||
|
(in $exclude .RelPermalink)
|
||||||
|
(in $exclude .File.TranslationBaseName)
|
||||||
|
}}
|
||||||
|
{{/* skip */}}
|
||||||
|
{{ else }}
|
||||||
|
{{ $candTags := .Params.tags | default (slice) }}
|
||||||
|
{{ $tagScore := len (intersect $candTags $tags) }}
|
||||||
|
|
||||||
|
{{/* Sektion-Priorität */}}
|
||||||
|
{{ $secScore := 0 }}
|
||||||
|
{{ if eq $page.Section "leistungen" }}
|
||||||
|
{{ if or (eq .Section "fokusthemen") (in (slice "post" "posts" "blog" "blogs" "news") .Section) }}{{ $secScore = 1 }}{{ end }}
|
||||||
|
{{ else if or (eq $page.Section "fokusthemen") (eq $page.Section "themen") }}
|
||||||
|
{{ if or (eq .Section "leistungen") (in (slice "post" "posts" "blog" "blogs" "news") .Section) }}{{ $secScore = 1 }}{{ end }}
|
||||||
|
{{ else if in (slice "post" "posts" "blog" "blogs" "news") $page.Section }}
|
||||||
|
{{ if or (eq .Section "leistungen") (eq .Section "fokusthemen") (eq .Section "themen") }}{{ $secScore = 1 }}{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ $score := add (mul $tagScore 10) $secScore }}
|
||||||
|
{{ if gt $score 0 }}
|
||||||
|
{{ $recs = $recs | append (dict "p" . "s" $score "d" .Date) }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ $recs = sort $recs "s" "desc" "d" "desc" }}
|
||||||
|
{{ range first $max $recs }}
|
||||||
|
{{ $pages = $pages | append .p }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if gt (len $pages) 0 }}
|
||||||
|
<section class="related section" aria-label="Verwandte Inhalte">
|
||||||
|
<div class="container my-container">
|
||||||
|
<h3 class="related-title">Verwandte Inhalte</h3>
|
||||||
|
|
||||||
|
<div class="related-grid">
|
||||||
|
{{ range $pages }}
|
||||||
|
{{/* Sektion-Label */}}
|
||||||
|
{{ $sec := .Section | default "" }}
|
||||||
|
{{ $secLabel := "" }}
|
||||||
|
{{ if eq $sec "leistungen" }}{{ $secLabel = "Leistungen" }}
|
||||||
|
{{ else if or (eq $sec "fokusthemen") (eq $sec "themen") }}{{ $secLabel = "Fokusthemen" }}
|
||||||
|
{{ else if or (eq $sec "post") (eq $sec "posts") (eq $sec "blog") (eq $sec "blogs") (eq $sec "news") }}{{ $secLabel = "Wissen" }}
|
||||||
|
{{ else }}{{ $secLabel = (title $sec) }}{{ end }}
|
||||||
|
|
||||||
|
{{/* Robust: Thumb finden (card_image → image → images[0] → Auto-Discovery) */}}
|
||||||
|
{{ $thumb := .Params.card_image | default .Params.image }}
|
||||||
|
{{ if not $thumb }}
|
||||||
|
{{ $imgs := .Params.images }}
|
||||||
|
{{ if $imgs }}
|
||||||
|
{{ $first := index $imgs 0 }}
|
||||||
|
{{ if (reflect.IsMap $first) }}
|
||||||
|
{{ $thumb = $first.src }}
|
||||||
|
{{ else }}
|
||||||
|
{{ $thumb = $first }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ if not $thumb }}
|
||||||
|
{{ $slug := .Params.slug | default .File.TranslationBaseName }}
|
||||||
|
{{ $cands := slice
|
||||||
|
(printf "static/images/%s/%s1.webp" .Section $slug)
|
||||||
|
(printf "static/images/leistungen/%s1.webp" $slug)
|
||||||
|
(printf "static/images/fokusthemen/%s1.webp" $slug)
|
||||||
|
(printf "static/images/%s1.webp" $slug)
|
||||||
|
}}
|
||||||
|
{{ range $cands }}
|
||||||
|
{{ if and (not $thumb) (fileExists .) }}
|
||||||
|
{{ $thumb = replace . "static" "" }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<article class="related-item">
|
||||||
|
<a class="related-link" href="{{ .RelPermalink }}">
|
||||||
|
<div class="related-thumb-wrap">
|
||||||
|
{{ if $thumb }}
|
||||||
|
{{ partial "img.html" (dict
|
||||||
|
"src" $thumb
|
||||||
|
"alt" .Title
|
||||||
|
"class" "related-thumb"
|
||||||
|
"loading" "lazy"
|
||||||
|
"page" $
|
||||||
|
) }}
|
||||||
|
{{ else }}
|
||||||
|
<div class="related-thumb related-thumb--placeholder" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 24 24" width="48" height="48">
|
||||||
|
<path d="M21 19V5a2 2 0 0 0-2-2H5C3.9 3 3 3.9 3 5v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2ZM8.5 13.5l2.5 3 3.5-4.5 4.5 6H5l3.5-4.5Z" fill="currentColor" opacity=".28"/>
|
||||||
|
<circle cx="8" cy="8" r="2" fill="currentColor" opacity=".28"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ if $secLabel }}<span class="related-badge">{{ $secLabel }}</span>{{ end }}
|
||||||
|
<span class="related-overlay" aria-hidden="true"></span>
|
||||||
|
</div>
|
||||||
|
<h4 class="related-name">{{ .Title }}</h4>
|
||||||
|
</a>
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.related-title{ text-align:center; margin:0 0 1.25rem }
|
||||||
|
.related-grid{ display:grid; gap:16px; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)) }
|
||||||
|
|
||||||
|
.related-item{ background:#fff; border-radius:14px; box-shadow:0 2px 12px rgba(0,0,0,.06); overflow:hidden; transition:transform .25s ease, box-shadow .25s ease }
|
||||||
|
.related-link{ display:block; color:inherit; text-decoration:none; outline:none }
|
||||||
|
.related-link:focus-visible{ box-shadow:0 0 0 3px rgba(4,110,110,.35) }
|
||||||
|
|
||||||
|
.related-thumb-wrap{ position:relative; aspect-ratio:16/9; overflow:hidden; background:#f3f3f3 }
|
||||||
|
.related-thumb{ width:100%; height:100%; object-fit:cover; display:block; transition:transform .35s ease }
|
||||||
|
.related-thumb--placeholder{ width:100%; height:100%; display:flex; align-items:center; justify-content:center; color:#9ca3af }
|
||||||
|
|
||||||
|
.related-badge{ position:absolute; left:12px; top:12px; padding:6px 10px; font-size:.75rem; border-radius:999px; background:rgba(4,110,110,.92); color:#fff; box-shadow:0 2px 8px rgba(0,0,0,.15) }
|
||||||
|
.related-overlay{ position:absolute; inset:0; background:linear-gradient(180deg,rgba(0,0,0,0) 55%,rgba(0,0,0,.22)); opacity:0; transition:opacity .25s ease }
|
||||||
|
|
||||||
|
.related-item:hover .related-overlay{ opacity:1 }
|
||||||
|
.related-item:hover{ transform:translateY(-2px); box-shadow:0 10px 28px rgba(0,0,0,.10) }
|
||||||
|
.related-item:hover .related-thumb{ transform:scale(1.03) }
|
||||||
|
|
||||||
|
.related-name{ margin:12px 14px 16px; line-height:1.3 }
|
||||||
|
|
||||||
|
@media (max-width:640px){
|
||||||
|
.related-grid{ gap:12px; grid-template-columns:1fr }
|
||||||
|
.related-name{ margin:10px 12px 14px }
|
||||||
|
.related-badge{ left:10px; top:10px; padding:5px 9px }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme:dark){
|
||||||
|
.related-item{ background:#023d3d; box-shadow:0 2px 10px rgba(0,0,0,.4) }
|
||||||
|
.related-thumb--placeholder{ background:#0b0f17; color:#6b7280 }
|
||||||
|
.related-badge{ background:rgba(245,166,35,.95); color:#111 }
|
||||||
|
.related-name{ color:#e5e7eb }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion:reduce){
|
||||||
|
.related-item, .related-thumb, .related-overlay{ transition:none !important }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</section>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
@ -1,39 +1,14 @@
|
||||||
{{- /* layouts/partials/seo.html */ -}}
|
{{- /* layouts/partials/seo.html — minimal & konfliktfrei */ -}}
|
||||||
{{- $siteTitle := site.Title -}}
|
|
||||||
{{- $sep := " | " -}}
|
{{- $desc := .Params.meta_description
|
||||||
<title>
|
| default .Params.description
|
||||||
{{- if .IsHome -}}
|
| default .Description
|
||||||
AMPERION – Ingenieurbüro & Elektrotechnikbetrieb für Erneuerbare Energien
|
| default site.Params.default_meta_description
|
||||||
{{- else -}}
|
| default site.Params.description
|
||||||
{{- .Title }}{{ $sep }}AMPERION – Photovoltaik, Energiespeicher, Ladeinfrastruktur
|
| default (plainify (.Summary | default .Content)) -}}
|
||||||
|
|
||||||
|
<meta name="description" content="{{ $desc | plainify | truncate 155 }}">
|
||||||
|
|
||||||
|
{{- if or .Draft .Params.noindex -}}
|
||||||
|
<meta name="robots" content="noindex,nofollow">
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
</title>
|
|
||||||
|
|
||||||
{{- $desc := cond (isset .Params "description") .Params.description
|
|
||||||
"AMPERION ist Ihr staatlich geprüftes Ingenieurbüro & Elektrotechnikbetrieb: Planung, Projektmanagement & Consulting für Photovoltaik, Energiespeicher und Ladeinfrastruktur – von der Idee bis zur Inbetriebnahme." -}}
|
|
||||||
<meta name="description" content="{{ $desc }}">
|
|
||||||
|
|
||||||
<link rel="canonical" href="{{ .Permalink }}">
|
|
||||||
|
|
||||||
{{- with .AlternativeOutputFormats }}{{ end -}}
|
|
||||||
|
|
||||||
{{- /* hreflang (de/en) */ -}}
|
|
||||||
{{- range .AllTranslations -}}
|
|
||||||
<link rel="alternate" hreflang="{{ .Language.Lang }}" href="{{ .Permalink }}">
|
|
||||||
{{- end -}}
|
|
||||||
<link rel="alternate" hreflang="x-default" href="{{ .Permalink }}">
|
|
||||||
|
|
||||||
<meta name="robots" content="index,follow">
|
|
||||||
|
|
||||||
<!-- Open Graph -->
|
|
||||||
<meta property="og:type" content="{{ if .IsHome }}website{{ else }}article{{ end }}">
|
|
||||||
<meta property="og:title" content="{{ if .IsHome }}AMPERION – Ingenieurbüro & Elektrotechnik{{ else }}{{ .Title }}{{ end }}">
|
|
||||||
<meta property="og:description" content="{{ $desc }}">
|
|
||||||
<meta property="og:url" content="{{ .Permalink }}">
|
|
||||||
{{- $ogimg := (resources.Get "images/og-default.jpg") | default (resources.Get "images/logo.png") -}}
|
|
||||||
{{- with $ogimg -}}{{ $p := .Fit "1200x630" }}<meta property="og:image" content="{{ $p.RelPermalink }}">{{ end -}}
|
|
||||||
|
|
||||||
<!-- Twitter -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
|
||||||
<meta name="twitter:title" content="{{ if .IsHome }}AMPERION – Ingenieurbüro & Elektrotechnik{{ else }}{{ .Title }}{{ end }}">
|
|
||||||
<meta name="twitter:description" content="{{ $desc }}">
|
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,36 @@
|
||||||
<!-- DNS preconnect -->
|
{{- /* Robust CSS loader: externe Links direkt, lokale Ressourcen sammeln, SCSS bauen, dann bündeln */ -}}
|
||||||
|
|
||||||
|
<!-- DNS prefetch on -->
|
||||||
<meta http-equiv="x-dns-prefetch-control" content="on">
|
<meta http-equiv="x-dns-prefetch-control" content="on">
|
||||||
|
|
||||||
|
{{- $bundleList := slice -}}
|
||||||
|
|
||||||
<!-- plugins + stylesheet -->
|
{{- /* 1) Plugins aus params: externe -> <link>, lokale -> sammeln */ -}}
|
||||||
{{ $styles := slice }}
|
{{- $plugins := site.Params.plugins.css | default (slice) -}}
|
||||||
{{ range site.Params.plugins.css }}
|
{{- range $plugins }}
|
||||||
{{ if findRE "^http" .link }}
|
{{- $link := .link | default "" -}}
|
||||||
<link crossorigin="anonymous" media="all" rel="stylesheet" href="{{ .link | relURL }}" {{.attributes | safeHTMLAttr}} >
|
{{- if $link -}}
|
||||||
{{ else }}
|
{{- if findRE `^https?://` $link -}}
|
||||||
{{ $styles = $styles | append (resources.Get .link) }}
|
<link rel="stylesheet" href="{{ $link }}" {{ .attributes | safeHTMLAttr }}>
|
||||||
{{ end }}
|
{{- else -}}
|
||||||
{{ end }}
|
{{- with (resources.Get $link) -}}
|
||||||
{{ $styles := $styles | append (resources.Get "scss/style.scss" | resources.ExecuteAsTemplate "style.scss" . | toCSS) }}
|
{{- $bundleList = $bundleList | append . -}}
|
||||||
{{ $styles := $styles | resources.Concat "/css/style.css" | minify | fingerprint "sha512"}}
|
{{- end -}}
|
||||||
<link rel="stylesheet" href="{{ $styles.Permalink }}">
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- /* 2) SCSS bauen (falls vorhanden) und hinzufügen */ -}}
|
||||||
|
{{- with (resources.Get "scss/style.scss") -}}
|
||||||
|
{{- $css := . | resources.ExecuteAsTemplate "scss/style.scss" $ | toCSS (dict "targetPath" "css/style.css") -}}
|
||||||
|
{{- $bundleList = $bundleList | append $css -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- /* 3) Bündeln + minify + fingerprint, sofern wir was haben */ -}}
|
||||||
|
{{- if gt (len $bundleList) 0 -}}
|
||||||
|
{{- $bundle := $bundleList | resources.Concat "css/bundle.css" | minify | fingerprint "sha512" -}}
|
||||||
|
<link rel="stylesheet" href="{{ $bundle.RelPermalink }}" integrity="{{ $bundle.Data.Integrity }}">
|
||||||
|
{{- else -}}
|
||||||
|
{{- /* Fallback: statische CSS falls vorhanden/gewünscht */ -}}
|
||||||
|
<link rel="stylesheet" href="{{ "css/style.css" | relURL }}">
|
||||||
|
{{- end -}}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1 @@
|
||||||
|
{"Target":"css/style.css","MediaType":"text/css","Data":{}}
|
||||||
|
|
@ -2,4 +2,3 @@ User-agent: *
|
||||||
Disallow:
|
Disallow:
|
||||||
|
|
||||||
Sitemap: https://www.amperion.at/sitemap.xml
|
Sitemap: https://www.amperion.at/sitemap.xml
|
||||||
Sitemap: https://www.amperion.at/en/sitemap.xml
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue