Blog O nas Kontakt
Content Pensatore

Jak przygotować treści na nową stronę internetową — praktyczny poradnik dla Gowarczów

Wielu przedsiębiorców w Gowarczowie popełnia błąd, skupiając się na wyglądzie strony, a nie na jej treści. Odkryj, jak krok po kroku przygotować skuteczne teksty SEO i angażujący content, który przyciągnie lokalnych klientów do Twojej firmy.

Wielu przedsiębiorców, również tych działających w Gowarczowie, popełnia ten sam fundamentalny błąd, gdy decyduje się na budowę nowej strony internetowej. Skupiają się na wyborze efektownego szablonu, funkcjonalnościach czy kolorystyce, zapominając o najważniejszym elemencie: treści. Strona bez przemyślanego, wartościowego contentu na stronę to jak piękna witryna sklepowa, za którą nie ma żadnego towaru. To właśnie słowa, obrazy i filmy, które prezentujesz, decydują o tym, czy potencjalny klient zrozumie Twoją ofertę, zaufa Ci i ostatecznie zdecyduje się na kontakt. Stworzenie strony to inwestycja, która powinna procentować – a bez odpowiednich tekstów, jej potencjał pozostaje niewykorzystany.

Sytuacja firm usługowych w Gowarczów

Firmy usługowe w Gowarczowie często opierają się na reputacji zdobytej przez lata działalności, poleceniach ustnych czy lokalnych reklamach. To ważne, ale w dzisiejszych realiach, nawet w mniejszych miejscowościach, obecność online staje się niezastąpiona. Mieszkańcy Gowarczowa, szukając fryzjera, mechanika, czy lokalnego rzemieślnika, coraz częściej sięgają po smartfon. Jeśli Twoja strona nie odpowiada na ich pytania, nie przedstawia Twojej oferty w przystępny sposób i nie jest łatwo odnaleziona w wyszukiwarce, tracisz szansę na pozyskanie nowych klientów. Problem często polega na traktowaniu strony jako cyfrowej wizytówki, a nie aktywnego narzędzia marketingowego. Brak strategicznego podejścia do contentu na stronę sprawia, że wiele witryn w regionie, choć estetycznych, nie realizuje swoich celów biznesowych.

Kluczem do sukcesu jest zrozumienie, że Twoja strona internetowa ma za zadanie edukować, przekonywać i prowadzić klienta przez ścieżkę zakupową. To nie jest tylko kwestia technologii, ale przede wszystkim komunikacji. Czy Twoje treści odpowiadają na realne potrzeby mieszkańców Gowarczowa? Czy używają języka, którym posługują się Twoi klienci? Czy rozwiązują ich problemy, zanim jeszcze zdążą je wyrazić? Odpowiedzi na te pytania powinny kształtować całą strategię tworzenia tekstów SEO i innych elementów contentu.

Decyzje strategiczne przed startem

Zanim zasiądziesz do pisania pierwszego zdania, musisz podjąć kilka kluczowych decyzji, które zdefiniują kierunek Twojej strategii contentowej. Pominięcie tego etapu często prowadzi do tworzenia chaotycznych i nieskutecznych treści. To fundament, na którym zbudujesz całą swoją komunikację online.

Kim jest Twój idealny klient?

  • Demografia i lokalizacja: Czy to mieszkańcy samego Gowarczowa, czy też osoby z okolicznych miejscowości? Jaki jest ich wiek, zawód, zainteresowania?
  • Potrzeby i problemy: Jakie wyzwania stawiają przed nimi Twoje usługi lub produkty? Jakie pytania najczęściej zadają? Przykładowo, mechanik w Gowarczowie powinien wiedzieć, czy jego klienci szukają szybkiej naprawy, czy kompleksowego serwisu przed urlopem.
  • Motywacje i obawy: Co skłania ich do zakupu? Czego obawiają się, korzystając z Twoich usług? Budując profil klienta, łatwiej stworzyć content na stronę, który rezonuje z ich doświadczeniami.

Jakie są cele Twojej strony internetowej?

  • Pozyskiwanie leadów: Czy chcesz, aby klienci dzwonili, wypełniali formularze, czy zapisywali się do newslettera?
  • Sprzedaż online: Czy strona ma bezpośrednio sprzedawać produkty (np. sklep internetowy)?
  • Budowanie świadomości marki: Czy chodzi o informowanie o Twojej firmie i jej wartościach w Gowarczowie?
  • Obsługa klienta: Czy strona ma odpowiadać na często zadawane pytania, odciążać infolinię?

Co wyróżnia Twoją firmę?

W natłoku ofert, musisz jasno komunikować, dlaczego klient powinien wybrać właśnie Ciebie. Czy to unikalna specjalizacja, długoletnie doświadczenie w Gowarczowie, elastyczne godziny pracy, czy może szczególne podejście do klienta? Te elementy powinny być mocno wyeksponowane w tekstach SEO i w całym content na stronę.

Proces krok po kroku

Skuteczne tworzenie treści na stronę to proces, który wymaga systematyczności i planowania. Oto praktyczny przewodnik, który pomoże Ci uporządkować pracę.

1. Badanie słów kluczowych i analiza konkurencji

  • Lokalne frazy: Zidentyfikuj słowa kluczowe, których mieszkańcy Gowarczowa używają, szukając Twoich usług (np. "usługi remontowe Gowarczów", "dentysta Gowarczów", "kwiaciarnia Gowarczów"). Wykorzystaj narzędzia do badania słów kluczowych, aby znaleźć te, które mają największy potencjał.
  • Intencja użytkownika: Zrozum, co stoi za danym zapytaniem. Czy użytkownik szuka informacji, czy chce dokonać zakupu? To pomoże Ci stworzyć odpowiedni content na stronę.
  • Analiza konkurencji: Sprawdź, jak konkurencyjne firmy w Gowarczowie i okolicach prezentują swoje usługi online. Co robią dobrze? Gdzie mają braki? To da Ci inspiracje i pozwoli znaleźć luki, które możesz wypełnić własnymi tekstami SEO.

2. Struktura strony i planowanie treści

  • Mapa strony: Stwórz logiczną strukturę strony (sitemap), która będzie intuicyjna dla użytkowników i wyszukiwarek. Zdecyduj, jakie podstrony będą niezbędne (np. O nas, Oferta, Cennik, Kontakt, Blog, FAQ).
  • Plan treści dla każdej podstrony: Dla każdej sekcji określ główny temat, cel, kluczowe słowa kluczowe oraz rodzaj contentu (tekst, zdjęcia, wideo). Pamiętaj o hierarchii informacji.

3. Tworzenie contentu

  • Pisz dla użytkownika, optymalizuj dla wyszukiwarek: Twoje teksty powinny być przede wszystkim wartościowe i zrozumiałe dla ludzi. Dopiero potem zadbaj o odpowiednie wplecenie słów kluczowych, nagłówków i meta opisów, aby zwiększyć widoczność w wyszukiwarkach (teksty SEO).
  • Unikalność i wartość: Nie kopiuj treści. Twórz oryginalny content na stronę, który przedstawia Twoją perspektywę, doświadczenie i oferuje rzeczywistą wartość dla odbiorcy.
  • Jasność i zwięzłość: Unikaj rozwlekłych zdań i branżowego żargonu, chyba że Twoja grupa docelowa go rozumie. Pisz prosto i konkretnie.
  • Wizualne urozmaicenie: Długie bloki tekstu mogą odstraszać. Używaj nagłówków, list punktowanych, pogrubień, zdjęć i infografik, aby ułatwić przyswajanie informacji.

4. Optymalizacja i weryfikacja

  • Dopracowanie meta danych: Stwórz unikalne i angażujące tytuły (</code>) i opisy (<code><meta description></code>) dla każdej podstrony. To one często decydują o tym, czy użytkownik kliknie w Twój wynik wyszukiwania.</li> <li><strong>Weryfikacja czytelności:</strong> Przeczytaj swoje treści na głos. Czy brzmią naturalnie? Czy łatwo je zrozumieć? Poproś kogoś z zewnątrz o opinię.</li> <li><strong>Sprawdzenie poprawności:</strong> Błędy ortograficzne, gramatyczne czy stylistyczne mogą podważyć profesjonalizm Twojej firmy. Dokładna korekta to absolutna podstawa.</li> </ul> <h2>Treści i UX pod lokalne wyszukiwania</h2> <p>Dla firm w <strong>Gowarczowie</strong>, które chcą pozyskiwać klientów z najbliższej okolicy, optymalizacja treści pod kątem lokalnego SEO i UX (User Experience) jest niezwykle istotna. To nie tylko kwestia wplecenia nazwy miejscowości, ale kompleksowego podejścia do prezentacji informacji.</p> <h3>Znaczenie lokalnych słów kluczowych</h3> <p>Użytkownicy szukający lokalnych usług często dodają nazwę miejscowości do swoich zapytań. „Fryzjer Gowarczów”, „restauracja Gowarczów”, „mechanik samochodowy Gowarczów” – to przykłady fraz, które musisz naturalnie wpleść w <strong>teksty SEO</strong> na swojej stronie. Pamiętaj, aby nie przesadzać z ich liczbą (tzw. keyword stuffing), ponieważ może to zostać negatywnie ocenione przez algorytmy Google i zniechęcić użytkowników. Warto umieszczać je w:</p> <ul> <li>Tytułach stron (<code><title></code>) i meta opisach.</li> <li>Nagłówkach <code><h1></code>, <code><h2></code>, <code><h3></code>.</li> <li>Treści głównej, w sposób naturalny.</li> <li>Opisach zdjęć (atrybuty <code>alt</code>).</li> <li>Stopce strony.</li> </ul> <h3>Informacje kontaktowe i adresowe</h3> <p>Upewnij się, że Twoje pełne dane kontaktowe (adres, numer telefonu, e-mail) są łatwo dostępne i widoczne na każdej podstronie, najlepiej w stopce i na dedykowanej podstronie "Kontakt". Dodaj interaktywną mapę Google z zaznaczoną lokalizacją Twojej firmy w <strong>Gowarczowie</strong>. To nie tylko ułatwia klientom dotarcie do Ciebie, ale także sygnalizuje wyszukiwarkom, że Twoja firma działa lokalnie.</p> <h3>Referencje i opinie klientów</h3> <p>Chociaż nie będziemy wymyślać konkretnych cytatów, pamiętaj o tym, aby na stronie znalazło się miejsce na ogólne odniesienia do pozytywnych doświadczeń klientów. Zachęcaj do zostawiania opinii w Google Moja Firma. Pozytywne recenzje są potężnym dowodem społecznym i wspierają lokalne SEO. Możesz stworzyć sekcję z ogólnymi sformułowaniami typu „Nasi klienci cenią nas za...”, lub „Sprawdź nasze opinie w Google”.</p> <h3>Lokalny blog lub aktualności</h3> <p>Regularne publikowanie artykułów na lokalne tematy związane z Twoją branżą może znacząco poprawić widoczność. Na przykład, firma budowlana z Gowarczowa może pisać o „Wskazówkach dotyczących remontu domu w Gowarczowie” lub „Pozwoleniach na budowę w gminie Gowarczów”. To dostarcza wartościowy <strong>content na stronę</strong>, przyciąga ruch z długich ogonów (long-tail keywords) i pozycjonuje Cię jako eksperta w regionie.</p> <h3>Optymalizacja dla urządzeń mobilnych (Responsive Design)</h3> <p>Większość lokalnych wyszukiwań odbywa się na smartfonach. Twoja strona musi być w pełni responsywna, co oznacza, że automatycznie dostosowuje się do rozmiaru ekranu urządzenia. To nie tylko kwestia estetyki, ale także kluczowy czynnik rankingowy dla Google. Użytkownik, który nie może swobodnie przeglądać Twojej strony na telefonie, szybko ją opuści, co negatywnie wpłynie na współczynnik odrzuceń (bounce rate) i pozycje w wyszukiwarce.</p> <h2>Integracje: CRM, analityka, reklamy</h2> <p>Stworzenie wysokiej jakości <strong>contentu na stronę</strong> to dopiero początek. Aby w pełni wykorzystać potencjał Twojej nowej witryny, musisz ją zintegrować z innymi narzędziami, które wspomogą zbieranie danych, zarządzanie relacjami z klientami i prowadzenie efektywnych kampanii marketingowych.</p> <h3>Systemy CRM (Customer Relationship Management)</h3> <p>Integracja strony z systemem CRM pozwala na automatyczne gromadzenie danych kontaktowych z formularzy (np. formularza wyceny, formularza kontaktowego) i zapisywanie ich w scentralizowanej bazie. Dzięki temu żadne zapytanie nie zostanie pominięte, a Ty będziesz mógł śledzić historię interakcji z każdym klientem. Dobrze zaprojektowane formularze, do których prowadzą Twoje <strong>teksty SEO</strong> i <strong>content na stronę</strong>, są kluczowe dla efektywności CRM. Przykładowo, jeśli prowadzisz usługi w <strong>Gowarczowie</strong>, system CRM pomoże Ci efektywnie zarządzać zapytaniami od mieszkańców i okolic.</p> <h3>Narzędzia analityczne (np. Google Analytics)</h3> <p>Bez danych nie wiesz, co działa, a co wymaga poprawy. Instalacja narzędzi analitycznych jest absolutnie niezbędna. Pozwolą Ci one monitorować:</p> <ul> <li><strong>Ruch na stronie:</strong> Skąd pochodzą Twoi użytkownicy (np. z Gowarczowa, z wyszukiwarki, z mediów społecznościowych).</li> <li><strong>Zachowanie użytkowników:</strong> Które podstrony są najczęściej odwiedzane, ile czasu spędzają użytkownicy na stronie, które treści angażują ich najbardziej.</li> <li><strong>Konwersje:</strong> Ile osób wypełniło formularz, zadzwoniło, pobrało plik.</li> </ul> <p>Analiza tych danych jest kluczowa do optymalizacji <strong>contentu na stronę</strong> i strategii SEO. Jeśli widzisz, że konkretne <strong>teksty SEO</strong> przyciągają dużo ruchu, ale mają niski współczynnik konwersji, wiesz, że musisz je dopracować.</p> <h3>Platformy reklamowe (Google Ads, Social Media Ads)</h3> <p>Twoja strona internetowa z dobrze przygotowanym <strong>contentem na stronę</strong> jest lądowiskiem dla ruchu generowanego przez reklamy. Niezależnie od tego, czy prowadzisz kampanie w Google Ads, czy na platformach społecznościowych, muszą one kierować użytkownika na strony, które są spójne z przekazem reklamy i oferują wartościowe treści. Jeśli reklama obiecuje konkretne rozwiązanie, a strona docelowa nie dostarcza odpowiednich informacji lub ma słabe <strong>teksty SEO</strong>, pieniądze wydane na reklamę zostaną zmarnowane. Pamiętaj, aby targetować reklamy również na obszar <strong>Gowarczowa</strong>, aby dotrzeć do lokalnych klientów.</p> <p>Efektywna integracja tych systemów pozwala na stworzenie spójnego ekosystemu marketingowego, gdzie strona internetowa nie jest odizolowanym bytem, ale sercem, które pompuje krew do wszystkich innych elementów Twojej działalności online.</p> <h2>FAQ — najczęstsze pytania</h2> <h3>Co to są teksty SEO i dlaczego są ważne dla firm w Gowarczowie?</h3> <p>Teksty SEO to treści pisane w taki sposób, aby były atrakcyjne zarówno dla użytkowników, jak i dla algorytmów wyszukiwarek. Ich celem jest poprawa widoczności strony w wynikach wyszukiwania. Dla firm w Gowarczowie są kluczowe, ponieważ pomagają lokalnym mieszkańcom znaleźć Twoje usługi, gdy wpisują zapytania takie jak "mechanik Gowarczów" czy "fryzjer Gowarczów". Odpowiednio zoptymalizowane teksty zwiększają szanse na to, że to właśnie Twoja firma pojawi się na czołowych pozycjach.</p> <h3>Ile czasu zajmuje przygotowanie dobrego contentu na stronę?</h3> <p>Czas potrzebny na przygotowanie wartościowego contentu zależy od złożoności strony, liczby podstron, branży oraz stopnia szczegółowości wymaganych informacji. Proces ten obejmuje badania, planowanie, pisanie, optymalizację i weryfikację. Dla średniej strony usługowej w Gowarczowie może to zająć od kilku tygodni do kilku miesięcy, jeśli ma być wykonany rzetelnie i z uwzględnieniem zasad SEO.</p> <h3>Czy mogę używać tych samych treści na stronie i w mediach społecznościowych?</h3> <p>Możesz i powinieneś zachować spójność przekazu, ale zaleca się dostosowanie contentu do specyfiki każdej platformy. Na stronie internetowej możesz pozwolić sobie na dłuższe, bardziej szczegółowe teksty SEO i obszerne opisy. W mediach społecznościowych lepiej sprawdzają się krótsze formy, angażujące grafiki i bezpośrednie pytania, które zachęcają do interakcji i przekierowują na Twoją stronę, gdzie czeka pełny content.</p> </div> </div> </section> <section class="w-full bg-zinc-900 py-16 md:py-20"> <div class="max-w-5xl mx-auto px-6 text-center reveal-element"> <h2 class="font-heading text-3xl md:text-4xl text-white mb-4">Potrzebujesz wsparcia w przygotowaniu treści na stronę?</h2> <p class="text-zinc-300 text-base leading-relaxed max-w-2xl mx-auto mb-8">Skuteczny content to podstawa widoczności online. Pomożemy Ci stworzyć teksty, które przyciągną klientów z Gowarczowa i okolic.</p> <a href="/wycena/" class="inline-flex items-center justify-center gap-2 bg-rose-500 hover:bg-rose-600 text-white font-medium px-7 py-3.5 rounded-full transition-all hover:scale-105 active:scale-95"> Umów bezpłatną wycenę <svg aria-hidden="true" focusable="false" class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"> <path d="M5 12h14m-7-7l7 7-7 7"></path> </svg> </a> </div> </section> </article> </main> <style> .reveal-element { opacity: 0; transform: translateY(20px); transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), transform 0.7s cubic-bezier(0.16, 1, 0.3, 1); } .reveal-element.is-visible { opacity: 1; transform: translateY(0); } </style> <style> .blog-content { font-size: 1.0625rem; line-height: 1.75; color: #52525b; } .blog-content > *:first-child { margin-top: 0; } .blog-content h2 { font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: clamp(1.5rem, 4vw, 1.875rem); font-weight: 600; line-height: 1.25; letter-spacing: -0.02em; color: #18181b; margin-top: 2.5rem; margin-bottom: 0.75rem; } .blog-content h3 { font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: 1.25rem; font-weight: 600; line-height: 1.35; color: #18181b; margin-top: 1.75rem; margin-bottom: 0.5rem; } .blog-content h4 { font-size: 1.125rem; font-weight: 600; color: #18181b; margin-top: 1.5rem; margin-bottom: 0.5rem; } .blog-content p { margin-bottom: 1.25em; line-height: 1.75; color: #52525b; } .blog-content ul, .blog-content ol { margin: 1rem 0 1.5rem; padding-left: 1.5rem; color: #52525b; } .blog-content ul { list-style-type: disc; } .blog-content ol { list-style-type: decimal; } .blog-content li { margin-bottom: 0.5em; line-height: 1.7; } .blog-content li::marker { color: #f43f5e; } .blog-content a { color: #f43f5e; text-decoration: underline; } .blog-content a:hover { color: #e11d48; } .blog-content strong { color: #18181b; font-weight: 600; } .blog-content blockquote { border-left: 4px solid #f43f5e; padding-left: 1rem; margin: 1.5rem 0; color: #71717a; font-style: italic; } </style> <script> document.addEventListener('DOMContentLoaded', function () { var elements = document.querySelectorAll('.reveal-element'); if (!elements.length) return; var observer = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { entry.target.classList.add('is-visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' }); elements.forEach(function (el) { observer.observe(el); }); }); </script> </div> <section id="kontakt" class="w-full bg-zinc-900"> <div class="max-w-7xl mx-auto px-6 py-20 lg:py-28"> <div class="grid lg:grid-cols-12 gap-12 lg:gap-16 items-start"> <div class="lg:col-span-5 reveal-element" style="opacity: 1; transform: translateY(0px); transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);"> <p class="text-rose-400 text-sm font-medium tracking-widest uppercase mb-3">Napisz do nas</p> <h2 class="font-heading text-3xl md:text-4xl lg:text-5xl text-white mb-6"> <span>Zbudujmy Ci biznes, który</span> <span class="italic text-rose-400">zarabia</span> </h2> <p class="text-zinc-400 text-base leading-relaxed mb-10">Opowiedz nam o swoim projekcie. Pierwsza konsultacja jest bezpłatna — sprawdzimy co możemy dla Ciebie zrobić i ile to kosztuje.</p> <div class="space-y-6"> <div class="flex items-center gap-4"> <div class="w-10 h-10 bg-zinc-800 rounded-xl flex items-center justify-center border border-zinc-700"> <svg aria-hidden="true" focusable="false" class="w-5 h-5 text-rose-400" fill="none" stroke="currentColor" stroke-width="1.5" viewbox="0 0 24 24"> <path d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75"> </path> </svg> </div> <span class="text-zinc-300 text-sm">biuro@pensatore.pl</span> </div> <div class="flex items-center gap-4"> <div class="w-10 h-10 bg-zinc-800 rounded-xl flex items-center justify-center border border-zinc-700"> <svg aria-hidden="true" focusable="false" class="w-5 h-5 text-rose-400" fill="none" stroke="currentColor" stroke-width="1.5" viewbox="0 0 24 24"> <path d="M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 002.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 01-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 00-1.091-.852H4.5A2.25 2.25 0 002.25 4.5v2.25z"> </path> </svg> </div> <a href="tel:+48787112730" class="text-zinc-300 text-sm hover:text-white transition-colors">+48 787 112 730</a> </div> </div> <div class="mt-10 pt-10 border-t border-zinc-800"> <p class="text-zinc-500 text-xs uppercase tracking-wider mb-4">Nasze usługi</p> <div class="flex flex-wrap gap-2"> <a href="/zaistniej-online/" class="text-xs bg-zinc-800 text-zinc-400 px-3 py-1.5 rounded-full border border-zinc-700 hover:text-zinc-200 hover:border-zinc-500 transition-colors">Zaistniej online</a> <a href="/sprzedawaj-online/" class="text-xs bg-zinc-800 text-zinc-400 px-3 py-1.5 rounded-full border border-zinc-700 hover:text-zinc-200 hover:border-zinc-500 transition-colors">Sprzedawaj online</a> <a href="/badz-widoczny/" class="text-xs bg-zinc-800 text-zinc-400 px-3 py-1.5 rounded-full border border-zinc-700 hover:text-zinc-200 hover:border-zinc-500 transition-colors">Bądź widoczny</a> <a href="/pokaz-sie-z-ekranu/" class="text-xs bg-zinc-800 text-zinc-400 px-3 py-1.5 rounded-full border border-zinc-700 hover:text-zinc-200 hover:border-zinc-500 transition-colors">Pokaż się z ekranu</a> </div> </div> </div> <div class="lg:col-span-7 reveal-element"> <div class="bg-zinc-800/50 rounded-2xl p-8 lg:p-10 border border-zinc-700/50 backdrop-blur-sm"> <form class="space-y-5 contact-form" method="post" action="/kontakt/wyslij/" data-contact-form> <input type="hidden" name="csrfmiddlewaretoken" value="tqIbSA5HG5J7xDKMTz4KYwq5ZXHiiRTUQLr9C6VKxvozsrePXWNflnShd30Eq6vt"> <input type="hidden" name="source" value="footer" /> <div class="grid sm:grid-cols-2 gap-5"> <div> <label class="text-zinc-400 text-sm mb-2 block">Imię i nazwisko</label> <input type="text" name="name" required class="w-full bg-zinc-900/50 border border-zinc-700 rounded-xl px-4 py-3 text-white text-sm placeholder-zinc-600 focus:outline-none focus:border-rose-500/50 focus:ring-1 focus:ring-rose-500/20 transition-colors" placeholder="Jan Kowalski" /> </div> <div> <label class="text-zinc-400 text-sm mb-2 block">E-mail</label> <input type="email" name="email" required class="w-full bg-zinc-900/50 border border-zinc-700 rounded-xl px-4 py-3 text-white text-sm placeholder-zinc-600 focus:outline-none focus:border-rose-500/50 focus:ring-1 focus:ring-rose-500/20 transition-colors" placeholder="jan@firma.pl" /> </div> </div> <div> <label class="text-zinc-400 text-sm mb-2 block">Temat</label> <input type="text" name="subject" required class="w-full bg-zinc-900/50 border border-zinc-700 rounded-xl px-4 py-3 text-white text-sm placeholder-zinc-600 focus:outline-none focus:border-rose-500/50 focus:ring-1 focus:ring-rose-500/20 transition-colors" placeholder="Np. Wycena strony internetowej" /> </div> <div> <label class="text-zinc-400 text-sm mb-2 block">Opisz swój projekt</label> <textarea rows="4" name="message" required class="w-full bg-zinc-900/50 border border-zinc-700 rounded-xl px-4 py-3 text-white text-sm placeholder-zinc-600 focus:outline-none focus:border-rose-500/50 focus:ring-1 focus:ring-rose-500/20 transition-colors resize-none" placeholder="Opowiedz nam o swoich potrzebach..."></textarea> </div> <button type="submit" class="w-full bg-rose-500 hover:bg-rose-600 text-white font-medium px-7 py-3.5 rounded-full transition-all hover:scale-[1.02] active:scale-[0.98] shadow-lg shadow-rose-500/20">Wyślij zapytanie</button> <p class="text-zinc-500 text-xs text-center" data-contact-status>Odpowiadamy w ciągu 24 godzin. Konsultacja jest bezpłatna.</p> </form> </div> </div> </div> </div> </section> <footer class="w-full bg-zinc-950"> <div class="max-w-7xl mx-auto px-6 py-12"> <div class="flex flex-col lg:flex-row items-start lg:items-center justify-between gap-8 pb-10 border-b border-zinc-800"> <div class="flex items-center gap-2.5"> <span class="font-heading text-lg text-white tracking-tight">pensatore</span> </div> <div class="flex flex-wrap gap-6"><a href="/zaistniej-online/" class="text-sm text-zinc-500 hover:text-zinc-300 transition-colors">Zaistniej online</a><a href="/sprzedawaj-online/" class="text-sm text-zinc-500 hover:text-zinc-300 transition-colors">Sprzedawaj online</a><a href="/badz-widoczny/" class="text-sm text-zinc-500 hover:text-zinc-300 transition-colors">Bądź widoczny</a><a href="/pokaz-sie-z-ekranu/" class="text-sm text-zinc-500 hover:text-zinc-300 transition-colors">Pokaż się z ekranu</a></div> </div> <div class="flex flex-col md:flex-row items-center justify-between gap-4 pt-8"> <p class="text-xs text-zinc-500">© 2026 Pensatore House. Wszelkie prawa zastrzeżone.</p> <p class="text-xs text-zinc-500 text-center md:text-right"> Partner strategiczny: <a href="https://kryminalnezagadki.pl/" class="text-zinc-400 hover:text-zinc-200 transition-colors underline underline-offset-2">Kryminalne Zagadki</a> — logiczne śledztwa online po polsku. </p> <div class="flex items-center gap-6"><a href="/polityka-prywatnosci/" class="text-xs text-zinc-500 hover:text-zinc-300 transition-colors">Polityka prywatności</a><a href="/polityka-cookies/" class="text-xs text-zinc-500 hover:text-zinc-300 transition-colors">Cookies</a></div> </div> </div> </footer> <div id="newsletter-popup" class="fixed inset-0 z-[99999] hidden items-center justify-center bg-zinc-950/70 px-6 backdrop-blur-sm"> <div class="relative w-full max-w-md rounded-3xl bg-white p-8 shadow-2xl shadow-zinc-950/20"> <button type="button" data-newsletter-close class="absolute right-4 top-4 rounded-full p-2 text-zinc-400 hover:bg-zinc-100 hover:text-zinc-700" aria-label="Zamknij newsletter"> <svg aria-hidden="true" focusable="false" class="h-5 w-5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"> <path d="M6 18L18 6M6 6l12 12"></path> </svg> </button> <p class="text-rose-500 text-sm font-medium tracking-widest uppercase mb-3">Newsletter</p> <h2 class="font-heading text-3xl text-zinc-900 mb-4">Zapisz się i potwierdź 10% zniżki</h2> <p class="text-zinc-500 text-sm leading-relaxed mb-6">Dostaniesz praktyczne wskazówki o stronach, reklamie i sprzedaży online. Kod rabatowy wyślemy po potwierdzeniu adresu e-mail.</p> <form method="post" action="/newsletter/zapisz/" data-newsletter-form class="space-y-4"> <input type="hidden" name="csrfmiddlewaretoken" value="tqIbSA5HG5J7xDKMTz4KYwq5ZXHiiRTUQLr9C6VKxvozsrePXWNflnShd30Eq6vt"> <input type="text" name="name" class="w-full rounded-xl border border-zinc-200 px-4 py-3 text-sm focus:border-rose-400 focus:outline-none" placeholder="Imię (opcjonalnie)" /> <input type="email" name="email" required class="w-full rounded-xl border border-zinc-200 px-4 py-3 text-sm focus:border-rose-400 focus:outline-none" placeholder="Twój e-mail" /> <label class="flex items-start gap-3 text-xs leading-relaxed text-zinc-500"> <input type="checkbox" name="marketing_consent" required class="mt-1 h-4 w-4 rounded border-zinc-300 text-rose-500 focus:ring-rose-400" /> <span>Wyrażam zgodę na otrzymywanie od EMPIRE SP. Z O.O. informacji marketingowych i handlowych drogą elektroniczną na podany adres e-mail, w tym newslettera Pensatore. Wiem, że zgodę mogę wycofać w każdej chwili. Szczegóły są w <a href="/polityka-prywatnosci/" class="text-rose-500 hover:text-rose-600">polityce prywatności</a>.</span> </label> <button type="submit" class="w-full rounded-full bg-rose-500 px-6 py-3.5 text-sm font-medium text-white transition-colors hover:bg-rose-600">Wyślij link potwierdzający</button> <p class="text-center text-xs text-zinc-400" data-newsletter-status>Administrator: EMPIRE SP. Z O.O. Zero spamu. Możesz wypisać się w każdej chwili.</p> </form> </div> </div> <script> document.addEventListener('DOMContentLoaded', function () { var contactForm = document.querySelector('[data-contact-form]'); if (contactForm) { contactForm.addEventListener('submit', function (event) { event.preventDefault(); var status = contactForm.querySelector('[data-contact-status]'); var button = contactForm.querySelector('button[type="submit"]'); if (status) status.textContent = 'Wysyłamy wiadomość...'; if (button) button.disabled = true; fetch(contactForm.action, { method: 'POST', body: new FormData(contactForm), headers: { 'X-Requested-With': 'XMLHttpRequest' } }) .then(function (response) { return response.json().then(function (data) { return { ok: response.ok, data: data }; }); }) .then(function (result) { if (status) status.textContent = result.data.message || (result.ok ? 'Wysłano.' : 'Nie udało się wysłać.'); if (result.ok) { contactForm.reset(); var sourceInput = contactForm.querySelector('input[name="source"]'); if (window.pensatoreTrackFormSubmit) { window.pensatoreTrackFormSubmit({ form_name: 'contact', form_id: 'contact-form-footer', form_source: sourceInput ? sourceInput.value : 'footer', }); } } }) .catch(function () { if (status) status.textContent = 'Nie udało się wysłać wiadomości. Spróbuj ponownie albo napisz e-mail.'; }) .finally(function () { if (button) button.disabled = false; }); }); } var popup = document.getElementById('newsletter-popup'); var newsletterForm = document.querySelector('[data-newsletter-form]'); var closeButtons = document.querySelectorAll('[data-newsletter-close]'); var storageKey = 'pensatore_newsletter_popup_closed'; function closeNewsletterPopup() { if (!popup) return; popup.classList.add('hidden'); popup.classList.remove('flex'); localStorage.setItem(storageKey, '1'); } var cookieConsentKey = 'pensatore_cookie_consent'; function hasCookieDecision() { var value = localStorage.getItem(cookieConsentKey); return value === 'accepted' || value === 'necessary'; } function scheduleNewsletterPopup() { if (!popup || localStorage.getItem(storageKey) === '1') return; if (!hasCookieDecision()) return; window.setTimeout(function () { if (!popup || localStorage.getItem(storageKey) === '1') return; if (!hasCookieDecision()) return; popup.classList.remove('hidden'); popup.classList.add('flex'); }, 2500); } if (hasCookieDecision()) { scheduleNewsletterPopup(); } document.addEventListener('pensatore:cookie-consent', function () { if (localStorage.getItem(storageKey) !== '1') { scheduleNewsletterPopup(); } }); closeButtons.forEach(function (button) { button.addEventListener('click', closeNewsletterPopup); }); if (popup) { popup.addEventListener('click', function (event) { if (event.target === popup) closeNewsletterPopup(); }); } if (newsletterForm) { newsletterForm.addEventListener('submit', function (event) { event.preventDefault(); var status = newsletterForm.querySelector('[data-newsletter-status]'); var button = newsletterForm.querySelector('button[type="submit"]'); if (status) status.textContent = 'Wysyłamy link potwierdzający...'; if (button) button.disabled = true; fetch(newsletterForm.action, { method: 'POST', body: new FormData(newsletterForm), headers: { 'X-Requested-With': 'XMLHttpRequest' } }) .then(function (response) { var contentType = response.headers.get('content-type') || ''; if (contentType.indexOf('application/json') === -1) { throw new Error('HTTP ' + response.status); } return response.json().then(function (data) { return { ok: response.ok, data: data }; }); }) .then(function (result) { if (status) status.textContent = result.data.message || 'Sprawdź skrzynkę i potwierdź zapis.'; if (result.ok) { localStorage.setItem(storageKey, '1'); newsletterForm.reset(); } }) .catch(function (error) { if (status) status.textContent = 'Nie udało się zapisać. Błąd serwera: ' + error.message + '.'; }) .finally(function () { if (button) button.disabled = false; }); }); } }); </script> <script> (() => { if (window.PensatoreVueSPA) return; window.PensatoreVueSPA = true; const parser = new DOMParser(); const ignoredExtensions = /\.(pdf|zip|rar|7z|jpg|jpeg|png|gif|webp|svg|mp4|webm|doc|docx|xls|xlsx)$/i; let spaApp = null; function getParts(root) { return { view: root.querySelector("#spa-view"), }; } function shouldHandleLink(link, event) { if (!link || event.defaultPrevented) return false; if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return false; if (link.target && link.target !== "_self") return false; if (link.hasAttribute("download")) return false; if (link.dataset.noSpa !== undefined) return false; if (link.getAttribute("href").startsWith("#")) return false; const url = new URL(link.href, window.location.href); if (url.origin !== window.location.origin) return false; if (url.protocol !== "http:" && url.protocol !== "https:") return false; if (url.pathname.startsWith("/admin/") || url.pathname.startsWith("/django-admin/")) return false; if (ignoredExtensions.test(url.pathname)) return false; if (url.pathname === window.location.pathname && url.search === window.location.search) return false; return true; } function syncHead(nextDocument) { document.title = nextDocument.title; const selectors = [ 'meta[name="description"]', 'meta[name="keywords"]', 'meta[name="robots"]', 'link[rel="canonical"]', 'meta[property^="og:"]', 'meta[name^="twitter:"]', 'script[type="application/ld+json"]', ]; selectors.forEach((selector) => { document.head.querySelectorAll(selector).forEach((node) => node.remove()); nextDocument.head.querySelectorAll(selector).forEach((node) => { document.head.appendChild(node.cloneNode(true)); }); }); } function replacePart(currentNode, nextNode) { if (!nextNode) return; const clone = nextNode.cloneNode(true); if (currentNode) { currentNode.replaceWith(clone); return clone; } return null; } function runScripts(scope) { const readyCallbacks = []; const nativeAddEventListener = document.addEventListener.bind(document); document.addEventListener = function (type, listener, options) { if (type === "DOMContentLoaded" && typeof listener === "function") { readyCallbacks.push(listener); return; } nativeAddEventListener(type, listener, options); }; try { scope.querySelectorAll("script").forEach((oldScript) => { if (oldScript.src && oldScript.src.includes("vue.global")) return; const script = document.createElement("script"); Array.from(oldScript.attributes).forEach((attr) => { script.setAttribute(attr.name, attr.value); }); script.textContent = oldScript.textContent; oldScript.replaceWith(script); }); } finally { document.addEventListener = nativeAddEventListener; } readyCallbacks.forEach((listener) => { listener.call(document, new Event("DOMContentLoaded")); }); } function createMountNode() { const node = document.createElement("div"); node.id = "pensatore-vue-spa"; node.hidden = true; document.body.appendChild(node); return node; } function ensurePreloaderHidden() { const preloader = document.getElementById("preloader"); if (!preloader) return; if (window.PensatorePreloader) { window.PensatorePreloader.hide(); return; } preloader.style.opacity = "0"; preloader.style.display = "none"; } function loadVue() { if (window.Vue) return Promise.resolve(window.Vue); if (window.__vueLoadPromise) return window.__vueLoadPromise; window.__vueLoadPromise = new Promise((resolve, reject) => { const script = document.createElement("script"); script.src = "https://unpkg.com/vue@3/dist/vue.global.prod.js"; script.async = true; script.onload = () => resolve(window.Vue); script.onerror = reject; document.body.appendChild(script); }); return window.__vueLoadPromise; } function mountSpa(Vue) { if (spaApp) return spaApp; spaApp = Vue.createApp({ data() { return { loading: false }; }, methods: { async go(url, pushState = true) { this.loading = true; document.documentElement.classList.add("spa-loading"); window.PensatorePreloader?.show(); try { const response = await fetch(url, { headers: { "X-Requested-With": "fetch", Accept: "text/html" }, credentials: "same-origin", }); if (!response.ok) { window.location.href = url; return; } const html = await response.text(); const nextDocument = parser.parseFromString(html, "text/html"); const currentParts = getParts(document); const nextParts = getParts(nextDocument); if (!nextParts.view) { window.location.href = url; return; } syncHead(nextDocument); const updatedParts = [ replacePart(currentParts.view, nextParts.view), ].filter(Boolean); if (pushState) { history.pushState({ spa: true }, "", url); } updatedParts.forEach((part) => runScripts(part)); ensurePreloaderHidden(); document.querySelector("#mobile-nav .mobile-menu")?.classList.add("hidden"); document.querySelector("#mobile-nav .mobile-menu-toggle")?.setAttribute("aria-expanded", "false"); window.scrollTo({ top: 0, behavior: "auto" }); document.dispatchEvent(new CustomEvent("pensatore:page-loaded")); } catch (error) { window.location.href = url; } finally { this.loading = false; document.documentElement.classList.remove("spa-loading"); } }, }, }).mount(createMountNode()); return spaApp; } document.addEventListener("click", async (event) => { const link = event.target.closest("a[href]"); if (!shouldHandleLink(link, event)) return; event.preventDefault(); try { const Vue = await loadVue(); const spa = mountSpa(Vue); spa.go(link.href); } catch (error) { window.location.href = link.href; } }); window.addEventListener("popstate", () => { window.location.href = window.location.href; }); })(); </script> <script> document.addEventListener('DOMContentLoaded', function () { var reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; if (reduceMotion) { document.documentElement.classList.add('ph-animate-static'); return; } document.documentElement.classList.add('ph-animate-ready'); var elements = document.querySelectorAll('.reveal-element'); elements.forEach(function (element, index) { element.style.setProperty('--ph-delay', Math.min(index, 4) * 60 + 'ms'); }); var observer = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { entry.target.classList.add('is-visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.08, rootMargin: '0px 0px -32px 0px' }); elements.forEach(function (element) { observer.observe(element); }); }); </script> </body> </html>