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 @@
- Die Praxis von außen + Die Praxis von außen @@ -70,7 +70,7 @@
- Sprechzimmer + Sprechzimmer diff --git a/view/practice.php b/view/practice.php index 92d4f7b..9c4cbdb 100644 --- a/view/practice.php +++ b/view/practice.php @@ -127,32 +127,32 @@