feat: optymalizacja SEO i dodanie 15 stron dzielnic Wrocławia
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Dostawa i Płatności | ThermCool',
|
||||
description: 'Koszty, formy i szacowane czasy dostawy urządzeń w sklepie ThermCool.',
|
||||
title: 'Realizacja zamówień | ThermCool',
|
||||
description: 'Informacje o realizacji zamówień na klimatyzatory i pompy ciepła. Montaż na terenie Dolnego Śląska, wycena indywidualna.',
|
||||
alternates: {
|
||||
canonical: '/dostawa',
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ import { getPosts, getFeaturedPost } from '@/content/posts';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Blog i Porady | ThermCool',
|
||||
description: 'Baza wiedzy na temat klimatyzacji, pomp ciepła i remontów. Czytaj nasze poradniki i bądź na bieżąco z nowościami w branży.',
|
||||
description: 'Baza wiedzy na temat klimatyzacji i pomp ciepła na Dolnym Śląsku. Poradniki, porównania urządzeń i aktualności branżowe.',
|
||||
alternates: {
|
||||
canonical: '/blog',
|
||||
}
|
||||
|
||||
@@ -220,6 +220,24 @@ export default async function MiastoPage({ params }: Props) {
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
{city.slug === 'wroclaw' && (
|
||||
<div className="mt-10">
|
||||
<p className="text-sm font-semibold text-primary text-center mb-4 uppercase tracking-wider font-heading">Dzielnice Wrocławia</p>
|
||||
<div className="flex flex-wrap justify-center gap-2">
|
||||
{['wroclaw-krzyki', 'wroclaw-fabryczna', 'wroclaw-psie-pole', 'wroclaw-srodmiescie',
|
||||
'wroclaw-stare-miasto', 'wroclaw-jagodno', 'wroclaw-gaj', 'wroclaw-maslice', 'wroclaw-oltaszyn',
|
||||
'wroclaw-wojszyce', 'wroclaw-muchobor-wielki', 'wroclaw-lesnica', 'wroclaw-pracze-odrzanskie', 'wroclaw-nowy-dwor', 'wroclaw-kowale'].map((slug) => {
|
||||
const name = slug.replace('wroclaw-', '').replace(/-/g, ' ');
|
||||
return (
|
||||
<Link key={slug} href={`/klimatyzacja/wroclaw/${slug}`}
|
||||
className="px-3 py-1.5 rounded-full bg-white border border-border text-xs font-medium text-primary hover:border-accent hover:text-accent transition-colors">
|
||||
{name.charAt(0).toUpperCase() + name.slice(1)}
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@ import { acProcessSteps } from '@/content/process';
|
||||
import { dolnySlaskCities } from '@/content/cities';
|
||||
import Link from 'next/link';
|
||||
export const metadata: Metadata = {
|
||||
title: 'Montaż i Serwis Klimatyzacji | ThermCool',
|
||||
description: 'Profesjonalny montaż klimatyzacji typu split i multisplit. Posiadamy uprawnienia F-gaz. Bezpłatny audyt, dobór urządzeń i sprawdzony serwis.',
|
||||
title: 'Montaż Klimatyzacji Wrocław i Dolny Śląsk | ThermCool',
|
||||
description: 'Profesjonalny montaż klimatyzacji split i multisplit we Wrocławiu i na Dolnym Śląsku. Uprawnienia F-Gaz, bezpłatna wycena, estetyczny montaż.',
|
||||
alternates: {
|
||||
canonical: '/klimatyzacja',
|
||||
}
|
||||
|
||||
@@ -0,0 +1,188 @@
|
||||
import { Metadata } from 'next';
|
||||
import { notFound } from 'next/navigation';
|
||||
import Link from 'next/link';
|
||||
import { MapPin, Clock, Phone, ArrowRight, ThermometerSun } from 'lucide-react';
|
||||
import { getDistrictBySlug, getAllDistrictSlugs, wroclawDistricts } from '@/content/wroclaw-districts';
|
||||
import { HeroSection } from '@/components/sections/HeroSection';
|
||||
import { ProcessSteps } from '@/components/sections/ProcessSteps';
|
||||
import { PricingTable } from '@/components/sections/PricingTable';
|
||||
import { WhyUs } from '@/components/sections/WhyUs';
|
||||
import { FaqAccordion } from '@/components/sections/FaqAccordion';
|
||||
import { CtaBanner } from '@/components/sections/CtaBanner';
|
||||
import { Testimonials } from '@/components/sections/Testimonials';
|
||||
import { acProcessSteps } from '@/content/process';
|
||||
import { companyDetails } from '@/content/company';
|
||||
|
||||
interface Props {
|
||||
params: Promise<{ dzielnica: string }>;
|
||||
}
|
||||
|
||||
export async function generateStaticParams() {
|
||||
return getAllDistrictSlugs().map((d) => ({ dzielnica: d.slug }));
|
||||
}
|
||||
|
||||
export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
||||
const { dzielnica } = await params;
|
||||
const district = getDistrictBySlug(dzielnica);
|
||||
if (!district) return { title: 'Nie znaleziono' };
|
||||
return {
|
||||
title: district.seoTitle,
|
||||
description: district.seoDescription,
|
||||
alternates: { canonical: `/klimatyzacja/wroclaw/${district.slug}` },
|
||||
openGraph: {
|
||||
title: district.seoTitle,
|
||||
description: district.seoDescription,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export default async function DzielnicaPage({ params }: Props) {
|
||||
const { dzielnica } = await params;
|
||||
const district = getDistrictBySlug(dzielnica);
|
||||
if (!district) notFound();
|
||||
|
||||
const otherDistricts = wroclawDistricts.filter((d) => d.slug !== district.slug);
|
||||
|
||||
const jsonLd = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "HVACBusiness",
|
||||
"name": companyDetails.name,
|
||||
"telephone": companyDetails.phone,
|
||||
"email": companyDetails.email,
|
||||
"url": `${process.env.NEXT_PUBLIC_BASE_URL || 'https://thermcool.pl'}/klimatyzacja/wroclaw/${district.slug}`,
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"streetAddress": companyDetails.address.street,
|
||||
"addressLocality": "Wrocław",
|
||||
"postalCode": companyDetails.address.zipCode,
|
||||
"addressCountry": "PL",
|
||||
},
|
||||
"areaServed": { "@type": "Place", "name": district.name },
|
||||
"priceRange": "$$",
|
||||
};
|
||||
|
||||
return (
|
||||
<main>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
||||
/>
|
||||
|
||||
<HeroSection
|
||||
eyebrow={`Klimatyzacja ${district.name} · Wrocław · F-Gaz`}
|
||||
title={`Montaż klimatyzacji — ${district.name}`}
|
||||
subtitle={district.heroSubtitle}
|
||||
ctaText="Zamów bezpłatną wycenę"
|
||||
ctaLink="/kontakt"
|
||||
secondaryCtaText="Zobacz klimatyzatory"
|
||||
secondaryCtaLink="/sklep"
|
||||
backgroundImage={district.heroImage}
|
||||
features={[
|
||||
'Bezpłatny audyt i dobór',
|
||||
'Uprawnienia F-Gaz',
|
||||
'Gwarancja do 5 lat',
|
||||
`Dojazd na ${district.name}`,
|
||||
]}
|
||||
/>
|
||||
|
||||
<section className="py-16 md:py-20 bg-white">
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-start">
|
||||
<div>
|
||||
<span className="text-xs font-semibold uppercase tracking-wider text-accent font-heading">
|
||||
Klimatyzacja {district.name}
|
||||
</span>
|
||||
<h2 className="text-2xl md:text-3xl font-bold text-primary font-heading mt-2 mb-4">
|
||||
Profesjonalny montaż klimatyzacji — {district.name}
|
||||
</h2>
|
||||
<p className="text-text-muted leading-relaxed mb-4">{district.introText}</p>
|
||||
<p className="text-text-muted leading-relaxed">{district.localFacts}</p>
|
||||
</div>
|
||||
<div className="flex flex-col gap-4">
|
||||
<div className="p-5 rounded-xl bg-slate-50 border border-border flex gap-4 items-start">
|
||||
<Clock className="size-5 text-accent shrink-0 mt-0.5" />
|
||||
<div>
|
||||
<p className="font-semibold text-primary text-sm">Czas montażu</p>
|
||||
<p className="text-text-muted text-sm mt-1">Standardowy montaż split trwa 4–8 godzin. Multisplit — 1–2 dni robocze.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="p-5 rounded-xl bg-slate-50 border border-border flex gap-4 items-start">
|
||||
<MapPin className="size-5 text-accent shrink-0 mt-0.5" />
|
||||
<div>
|
||||
<p className="font-semibold text-primary text-sm">Zasięg: {district.name} i okolice</p>
|
||||
<p className="text-text-muted text-sm mt-1">Obsługujemy całą dzielnicę i przyległe osiedla. Szybki dojazd, bez dodatkowych kosztów dojazdu w granicach Wrocławia.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="p-5 rounded-xl bg-accent-light border border-accent/20 flex gap-4 items-start">
|
||||
<Phone className="size-5 text-accent shrink-0 mt-0.5" />
|
||||
<div>
|
||||
<p className="font-semibold text-primary text-sm">Bezpłatna wycena</p>
|
||||
<p className="text-text-muted text-sm mt-1">Zadzwoń lub napisz — wyceniamy bezpłatnie, bez zobowiązań.</p>
|
||||
<a href={`tel:${companyDetails.phoneRaw}`} className="inline-flex items-center gap-1.5 text-accent font-semibold text-sm mt-2 hover:underline">
|
||||
{companyDetails.phone} <ArrowRight className="size-3.5" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="py-12 bg-slate-50 border-t border-b border-border">
|
||||
<div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<p className="text-base md:text-lg text-text-muted leading-relaxed italic">
|
||||
{district.acHighlight}
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<ProcessSteps
|
||||
steps={acProcessSteps}
|
||||
eyebrow="Jak Działamy"
|
||||
title={`Montaż klimatyzacji — ${district.name} — krok po kroku`}
|
||||
subtitle="Od pierwszego kontaktu do przekazania gotowej instalacji."
|
||||
/>
|
||||
|
||||
<PricingTable />
|
||||
|
||||
<WhyUs />
|
||||
<Testimonials />
|
||||
<FaqAccordion category="klimatyzacja" />
|
||||
|
||||
{/* Inne dzielnice Wrocławia */}
|
||||
<section className="py-16 bg-slate-50 border-t border-border">
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="text-center mb-8">
|
||||
<h2 className="text-xl md:text-2xl font-bold text-primary font-heading">
|
||||
Klimatyzacja we Wrocławiu — inne dzielnice
|
||||
</h2>
|
||||
</div>
|
||||
<div className="flex flex-wrap justify-center gap-3">
|
||||
{otherDistricts.map((d) => (
|
||||
<Link
|
||||
key={d.slug}
|
||||
href={`/klimatyzacja/wroclaw/${d.slug}`}
|
||||
className="px-4 py-2 rounded-full bg-white border border-border text-sm font-medium text-primary hover:border-accent hover:text-accent transition-colors shadow-sm"
|
||||
>
|
||||
Klimatyzacja {d.name}
|
||||
</Link>
|
||||
))}
|
||||
<Link
|
||||
href="/klimatyzacja/wroclaw"
|
||||
className="px-4 py-2 rounded-full bg-accent text-white border border-accent text-sm font-medium hover:bg-accent/90 transition-colors shadow-sm"
|
||||
>
|
||||
Klimatyzacja Wrocław →
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CtaBanner
|
||||
title={`Potrzebujesz klimatyzacji — ${district.name}?`}
|
||||
subtitle="Odpowiemy w ciągu godziny i umówimy bezpłatny audyt w dogodnym terminie."
|
||||
ctaText="Zadzwoń lub napisz"
|
||||
ctaLink="/kontakt"
|
||||
/>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import { ContactSection } from '@/components/sections/ContactSection';
|
||||
import { MapEmbed } from '@/components/sections/MapEmbed';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Kontakt | ThermCool',
|
||||
title: 'Kontakt — Klimatyzacja Wrocław | ThermCool',
|
||||
description: 'Skontaktuj się z nami! Odpowiemy na Twoje pytania, doradzimy w wyborze urządzeń i przygotujemy bezpłatną wycenę. Jesteśmy do Twojej dyspozycji.',
|
||||
alternates: {
|
||||
canonical: '/kontakt',
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ const fontHeading = Poppins({
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: {
|
||||
default: "ThermCool | Klimatyzacja i Pompy Ciepła — Dolny Śląsk",
|
||||
default: "ThermCool | Klimatyzacja i Pompy Ciepła Wrocław — Dolny Śląsk",
|
||||
template: "%s | ThermCool",
|
||||
},
|
||||
description: "Profesjonalny montaż i serwis klimatyzacji oraz pomp ciepła na Dolnym Śląsku. Uprawnienia F-Gaz, bezpłatny audyt, estetyczny montaż. Zadzwoń po wycenę!",
|
||||
@@ -30,7 +30,7 @@ export const metadata: Metadata = {
|
||||
type: 'website',
|
||||
locale: 'pl_PL',
|
||||
siteName: 'ThermCool',
|
||||
title: 'ThermCool | Klimatyzacja i Pompy Ciepła — Dolny Śląsk',
|
||||
title: 'ThermCool | Klimatyzacja i Pompy Ciepła Wrocław — Dolny Śląsk',
|
||||
description: 'Profesjonalny montaż i serwis klimatyzacji oraz pomp ciepła na Dolnym Śląsku.',
|
||||
images: [{ url: '/og-image.jpg', width: 1200, height: 630, alt: 'ThermCool — Klimatyzacja i Pompy Ciepła' }],
|
||||
},
|
||||
|
||||
+2
-2
@@ -9,8 +9,8 @@ import { CtaBanner } from '@/components/sections/CtaBanner';
|
||||
import { companyDetails } from '@/content/company';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'O Nas | ThermCool',
|
||||
description: 'Poznaj zespół specjalistów z ThermCool. Zobacz naszą historię, wartości oraz certyfikaty poświadczające najwyższą jakość usług instalacyjnych i remontowych.',
|
||||
title: 'O nas — ThermCool Klimatyzacja Wrocław',
|
||||
description: 'Poznaj zespół specjalistów ThermCool. Certyfikat F-Gaz, profesjonalny montaż i serwis klimatyzacji oraz pomp ciepła na Dolnym Śląsku.',
|
||||
alternates: {
|
||||
canonical: '/o-nas',
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import { CtaBanner } from '@/components/sections/CtaBanner';
|
||||
import { heatPumpProcessSteps } from '@/content/process';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Pompy Ciepła — Montaż i Dobór | ThermCool',
|
||||
title: 'Pompy Ciepła Wrocław — Montaż i Dofinansowanie | ThermCool',
|
||||
description: 'Zmniejsz rachunki za ogrzewanie dzięki pompie ciepła. Dobór urządzeń, profesjonalny montaż i pomoc w uzyskaniu dofinansowania z programu Czyste Powietrze.',
|
||||
alternates: {
|
||||
canonical: '/pompy-ciepla',
|
||||
|
||||
+10
-1
@@ -2,6 +2,7 @@ import { MetadataRoute } from 'next';
|
||||
import { getProducts } from '@/content/products';
|
||||
import { getPosts } from '@/content/posts';
|
||||
import { dolnySlaskCities } from '@/content/cities';
|
||||
import { wroclawDistricts } from '@/content/wroclaw-districts';
|
||||
export default function sitemap(): MetadataRoute.Sitemap {
|
||||
const baseUrl = 'https://thermcool.pl';
|
||||
|
||||
@@ -58,5 +59,13 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
priority: 0.7,
|
||||
}));
|
||||
|
||||
return [...staticRoutes, ...productRoutes, ...postRoutes, ...cityRoutes];
|
||||
// Dynamiczne strony dzielnic
|
||||
const districtUrls = wroclawDistricts.map((d) => ({
|
||||
url: `${baseUrl}/klimatyzacja/wroclaw/${d.slug}`,
|
||||
lastModified: new Date().toISOString(),
|
||||
changeFrequency: 'monthly' as const,
|
||||
priority: 0.7,
|
||||
}));
|
||||
|
||||
return [...staticRoutes, ...productRoutes, ...postRoutes, ...cityRoutes, ...districtUrls];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user