diff --git a/.htaccess b/.htaccess
index ef96fad..55538a1 100644
--- a/.htaccess
+++ b/.htaccess
@@ -2,11 +2,44 @@ Options +FollowSymLinks
RewriteEngine on
+# Redirect duplicate homepage URLs (/main.html and /index.php) to canonical root /
+RewriteRule ^main\.html$ / [R=301,L]
+RewriteCond %{THE_REQUEST} \s/+index\.php[\s?] [NC]
+RewriteCond %{QUERY_STRING} ^$
+RewriteRule ^index\.php$ / [R=301,L]
+
+# Clean URL routing for .html pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ([a-zA-Z0-9-_.=&+%]*)
RewriteRule ^([0-9a-zA-Z\-]+).html$ index.php?action=$1&%1 [L]
+# Custom 404 handler
+ErrorDocument 404 /index.php?action=404
+
+# Advertise HTTP/3 (h3) support via Alt-Svc header
+
+ Header setIfEmpty Alt-Svc "h3=\":443\"; ma=86400"
+
+
+# Gzip / Deflate Compression for Core Web Vitals & PageSpeed
+
+ AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript application/ld+json image/svg+xml
+
+
+# Browser Caching for Static Assets
+
+ ExpiresActive On
+ ExpiresByType image/jpeg "access plus 1 month"
+ ExpiresByType image/png "access plus 1 month"
+ ExpiresByType image/gif "access plus 1 month"
+ ExpiresByType image/x-icon "access plus 1 month"
+ ExpiresByType image/svg+xml "access plus 1 month"
+ ExpiresByType text/css "access plus 1 month"
+ ExpiresByType application/javascript "access plus 1 month"
+ ExpiresByType application/pdf "access plus 7 days"
+ ExpiresByType font/ttf "access plus 1 year"
+
+
- order allow,deny
- deny from all
+ Require all denied
diff --git a/Dockerfile b/Dockerfile
index ec8945c..ace17db 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,9 +4,9 @@ FROM php:8.5-apache-trixie
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \
&& printf "date.timezone = Europe/Berlin\nexpose_php = Off\nsession.cookie_httponly = 1\nsession.use_strict_mode = 1\n" > "$PHP_INI_DIR/conf.d/99-custom.ini"
-# Enable Apache modules and harden server signature
-RUN a2enmod rewrite headers expires deflate \
- && printf "ServerTokens Prod\nServerSignature Off\n" > /etc/apache2/conf-available/security-hardening.conf \
+# Enable Apache modules (including HTTP/2) and harden server signature
+RUN a2enmod rewrite headers expires deflate http2 \
+ && printf "ServerTokens Prod\nServerSignature Off\nProtocols h2 h2c http/1.1\n" > /etc/apache2/conf-available/security-hardening.conf \
&& a2enconf security-hardening
# Copy application code
diff --git a/index.php b/index.php
index f840ae2..6655f7c 100644
--- a/index.php
+++ b/index.php
@@ -48,6 +48,7 @@ switch ($action) {
break;
default:
http_response_code(404);
+ $action = '404';
$content = $loadFile('view/error.php');
}
diff --git a/robots.txt b/robots.txt
index eeb046d..ff80203 100644
--- a/robots.txt
+++ b/robots.txt
@@ -1,4 +1,9 @@
-User-agent:EmailCollector
+User-agent: EmailCollector
Disallow: /
-sitemap: https://www.dialyse-berlin.net/sitemap.xml.gz
\ No newline at end of file
+User-agent: *
+Allow: /
+Disallow: /api.php
+
+Sitemap: https://www.dialyse-berlin.net/sitemap.xml
+Sitemap: https://www.dialyse-berlin.net/sitemap.xml.gz
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..a878b14
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,40 @@
+
+
+
+ https://www.dialyse-berlin.net/
+ 2026-10-20
+ monthly
+ 1.0
+
+
+ https://www.dialyse-berlin.net/leistungen.html
+ 2026-10-20
+ monthly
+ 0.9
+
+
+ https://www.dialyse-berlin.net/praxis.html
+ 2026-10-20
+ monthly
+ 0.9
+
+
+ https://www.dialyse-berlin.net/team.html
+ 2026-10-20
+ monthly
+ 0.8
+
+
+ https://www.dialyse-berlin.net/kontakt.html
+ 2026-10-20
+ monthly
+ 0.9
+
+
+ https://www.dialyse-berlin.net/files/dialyse_flyer.pdf
+ 2026-10-20
+ monthly
+ 0.6
+
+
+
diff --git a/sitemap.xml.gz b/sitemap.xml.gz
index 53cdc25..93f6f62 100644
Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ
diff --git a/view/frontend.php b/view/frontend.php
index c2f56d6..167ad5f 100644
--- a/view/frontend.php
+++ b/view/frontend.php
@@ -13,9 +13,143 @@ $titles = [
'kontakt-formular' => 'Kontaktanfrage | Dialysezentrum Berlin-Mahlsdorf',
'impressum' => 'Impressum | Dialysezentrum Berlin-Mahlsdorf',
'datenschutz' => 'Datenschutzerklärung | Dialysezentrum Berlin-Mahlsdorf',
+ '404' => 'Seite nicht gefunden (404) | Dialysezentrum Berlin-Mahlsdorf',
];
-$pageTitle = isset($titles[$action]) ? $titles[$action] : 'Dialysezentrum Berlin-Mahlsdorf';
+
+$descriptions = [
+ 'main' => 'Dialysezentrum Berlin-Mahlsdorf & Marzahn: Individuelle Hämodialyse, Online-HDF, nephrologische Ambulanz und ganzjährige Feriendialysen in Berlin.',
+ 'leistungen' => 'Leistungen im Dialysezentrum Berlin-Mahlsdorf: Nephrologische Ambulanz, Hämodialyse, Online-HDF mit Nikkiso Haemo-Master, Fresenius BCM & Sonographie.',
+ 'praxis' => 'Praxisausstattung, Dialyse-Schichten & Ambulanz-Sprechzeiten: 16 Plätze in Berlin-Mahlsdorf, 18 Plätze in Berlin-Marzahn und moderne Nikkiso-Dialysetechnik.',
+ 'team' => 'Lernen Sie unser Ärzteteam kennen: Dr. med. Bianca Bischoff, Dr. med. Juliane Hoffzimmer, Dr. med. Claudia Körner und 23 engagierte Pflege- & Servicekräfte.',
+ 'kontakt' => 'Kontakt & Anfahrt zum Dialysezentrum Berlin-Mahlsdorf (Thorner Str. 1, 12623 Berlin) und zur Satellitendialyse Marzahn (Blumberger Damm 130, 12685 Berlin).',
+ 'kontakt-formular' => 'Senden Sie uns Ihre Anfrage bequem online über das Kontaktformular des Dialysezentrums Berlin-Mahlsdorf für Termine, Feriendialysen oder allgemeine Fragen.',
+ 'impressum' => 'Impressum und Pflichtangaben der Berufsausübungsgemeinschaft Dr. med. Bianca Bischoff & Dr. med. Juliane Hoffzimmer – Dialysezentrum Berlin-Mahlsdorf.',
+ 'datenschutz' => 'Datenschutzerklärung und Informationen zum Schutz Ihrer personenbezogenen Daten gemäß DSGVO im Dialysezentrum Berlin-Mahlsdorf.',
+ '404' => 'Die angeforderte Seite wurde leider nicht gefunden. Zurück zur Startseite des Dialysezentrums Berlin-Mahlsdorf.',
+];
+
$currentAction = isset($action) ? $action : 'main';
+$pageTitle = isset($titles[$currentAction]) ? $titles[$currentAction] : 'Dialysezentrum Berlin-Mahlsdorf';
+$pageDescription = isset($descriptions[$currentAction]) ? $descriptions[$currentAction] : $descriptions['main'];
+
+$baseUrl = 'https://www.dialyse-berlin.net';
+if ($currentAction === '404') {
+ $robotsMeta = 'noindex, nofollow';
+ $canonicalUrl = null;
+} elseif (in_array($currentAction, ['impressum', 'datenschutz', 'kontakt-formular'], true)) {
+ $robotsMeta = 'noindex, follow';
+ $canonicalUrl = $baseUrl . '/' . $currentAction . '.html';
+} elseif ($currentAction === 'main') {
+ $robotsMeta = 'index, follow';
+ $canonicalUrl = $baseUrl . '/';
+} else {
+ $robotsMeta = 'index, follow';
+ $canonicalUrl = $baseUrl . '/' . $currentAction . '.html';
+}
+
+$schemaGraph = [
+ [
+ '@type' => 'MedicalClinic',
+ '@id' => $baseUrl . '/#organization',
+ 'name' => 'Dialysezentrum Berlin-Mahlsdorf',
+ 'alternateName' => 'Zentrum für Nephrologie und Dialyse – Dr. med. Bianca Bischoff & Dr. med. Juliane Hoffzimmer',
+ 'url' => $baseUrl . '/',
+ 'logo' => $baseUrl . '/img/logo_dialysezentrum.png',
+ 'image' => $baseUrl . '/img/gallery/praxis1.jpg',
+ 'description' => $descriptions['main'],
+ 'medicalSpecialty' => 'https://schema.org/Nephrology',
+ 'telephone' => '+49-30-5662484',
+ 'email' => 'kontakt@dialyse-berlin.net',
+ 'address' => [
+ '@type' => 'PostalAddress',
+ 'streetAddress' => 'Thorner Straße 1',
+ 'postalCode' => '12623',
+ 'addressLocality' => 'Berlin',
+ 'addressRegion' => 'Berlin',
+ 'addressCountry' => 'DE',
+ ],
+ 'geo' => [
+ '@type' => 'GeoCoordinates',
+ 'latitude' => 52.5078291,
+ 'longitude' => 13.6092903,
+ ],
+ 'hasMap' => 'https://www.google.com/maps/place/Dialysezentrum+Berlin-Mahlsdorf/@52.5078291,13.6092903,17z/data=!3m1!4b1!4m6!3m5!1s0x47a84991f9c57f7f:0xad4486f559442067!8m2!3d52.5078291!4d13.6092903!16s%2Fg%2F1tdqghgn',
+ 'openingHoursSpecification' => [
+ [
+ '@type' => 'OpeningHoursSpecification',
+ 'dayOfWeek' => ['Monday', 'Wednesday', 'Friday'],
+ 'opens' => '07:00',
+ 'closes' => '20:00',
+ ],
+ [
+ '@type' => 'OpeningHoursSpecification',
+ 'dayOfWeek' => ['Tuesday', 'Thursday', 'Saturday'],
+ 'opens' => '07:00',
+ 'closes' => '13:00',
+ ],
+ ],
+ 'department' => [
+ '@type' => 'MedicalClinic',
+ 'name' => 'Dialysezentrum Berlin-Mahlsdorf – Satellitendialyse Marzahn',
+ 'medicalSpecialty' => 'https://schema.org/Nephrology',
+ 'telephone' => '+49-30-5662484',
+ 'email' => 'kontakt@dialyse-berlin.net',
+ 'address' => [
+ '@type' => 'PostalAddress',
+ 'streetAddress' => 'Blumberger Damm 130 (Eingang: Pritzhagener Weg 21)',
+ 'postalCode' => '12685',
+ 'addressLocality' => 'Berlin',
+ 'addressRegion' => 'Berlin',
+ 'addressCountry' => 'DE',
+ ],
+ 'geo' => [
+ '@type' => 'GeoCoordinates',
+ 'latitude' => 52.5428128,
+ 'longitude' => 13.5716785,
+ ],
+ 'hasMap' => 'https://www.google.com/maps/place/Dialysezentrum+Berlin-Mahlsdorf+LC/@52.5428128,13.5716785,17z/data=!3m1!4b1!4m6!3m5!1s0x47a84991f9d5111b:0xda0b4785760166c5!8m2!3d52.5428128!4d13.5716785!16s%2Fg%2F1ts_5mmj',
+ ],
+ 'employee' => [
+ [
+ '@type' => 'Physician',
+ 'name' => 'Dr. med. Bianca Bischoff',
+ 'jobTitle' => 'Fachärztin für Innere Medizin und Nephrologie',
+ 'medicalSpecialty' => 'https://schema.org/Nephrology',
+ ],
+ [
+ '@type' => 'Physician',
+ 'name' => 'Dr. med. Juliane Hoffzimmer',
+ 'jobTitle' => 'Fachärztin für Innere Medizin und Nephrologie',
+ 'medicalSpecialty' => 'https://schema.org/Nephrology',
+ ],
+ [
+ '@type' => 'Physician',
+ 'name' => 'Dr. med. Claudia Körner',
+ 'jobTitle' => 'Fachärztin für Innere Medizin',
+ ],
+ ],
+ ],
+];
+
+if ($canonicalUrl && $currentAction !== 'main') {
+ $schemaGraph[] = [
+ '@type' => 'BreadcrumbList',
+ 'itemListElement' => [
+ [
+ '@type' => 'ListItem',
+ 'position' => 1,
+ 'name' => 'Startseite',
+ 'item' => $baseUrl . '/',
+ ],
+ [
+ '@type' => 'ListItem',
+ 'position' => 2,
+ 'name' => trim(explode('|', $pageTitle)[0]),
+ 'item' => $canonicalUrl,
+ ],
+ ],
+ ];
+}
?>
@@ -24,9 +158,28 @@ $currentAction = isset($action) ? $action : 'main';
=htmlspecialchars($pageTitle)?>
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -81,6 +234,7 @@ $currentAction = isset($action) ? $action : 'main';
diff --git a/view/main.php b/view/main.php
index 9a7597c..a236025 100644
--- a/view/main.php
+++ b/view/main.php
@@ -56,7 +56,7 @@