Уявіть: сайт працює по HTTPS, але частина посилань веде на HTTP, і браузер блокує завантаження. Або пошуковик індексує обидві версії, розмиваючи PageRank. Неправильний редирект вбиває SEO та довіру користувачів. Кожен втрачений клієнт через mixed content обходиться бізнесу в середньому $1000. Наша задача — налаштувати єдину HTTPS-версію з HSTS, щоб виключити витоки трафіку та downgrade-атаки. При правильному налаштуванні SEO-трафік може зрости до 15%, а час завантаження скоротиться на 30% за рахунок усунення зайвих редиректів. Ми займаємося цим багато років, виконали понад 120 проектів з міграції на HTTPS. Зв'яжіться з нами — проведемо безкоштовний аудит конфігурації та перевіримо ланцюжок редиректів і стан HSTS.
Чому одного редиректу недостатньо?
Редирект з HTTP на HTTPS — лише перший крок. Без HSTS браузер не запам'ятовує вимогу, і при наступному заході знову робить HTTP-запит, потенційно вразливий для man-in-the-middle. Крім того, ланцюжок з кількох редиректів (наприклад, http → https://www → https:// без www) збільшує час завантаження на 1–2 секунди та негативно впливає на Core Web Vitals. На практиці кожен додатковий редирект додає 50–100 мс до TTFB. Оптимальна схема: один редирект 301 з HTTP на HTTPS (з www або без) і одразу HSTS-заголовок.
Проблеми, які вирішує правильний редирект
- Mixed content: коли HTTPS-сторінка підвантажує скрипти або стилі по HTTP. Це блокується браузером, і функціонал ламається. Ми перевіряємо всі ресурси та виправляємо протокол.
- Downgrade-атаки: зловмисник перехоплює HTTP-запит і підміняє контент. HSTS з preload повністю виключає цей вектор.
- SEO-втрати: подвійна індексація, некоректні редиректи, втрата посилальної ваги. Ми налаштовуємо канонічний URL та правильні статуси.
Як ми це робимо: стек і конфіги
Використовуємо перевірені зв'язки: Nginx + Laravel, Apache + WordPress, Cloudflare. Наводимо конфігурації для кожного випадку.
Nginx: редирект HTTP → HTTPS
# Редирект всего HTTP-трафика server { listen 80 default_server; listen [::]:80 default_server; server_name _; location /.well-known/acme-challenge/ { root /var/www/certbot; } location / { return 301 https://$host$request_uri; } } # Редирект www → non-www (або навпаки) + HTTPS server { listen 443 ssl; server_name ~^(www\.)?(.+)$; # SSL сертифікат – замініть на свій ssl_certificate /etc/letsencrypt/live/domain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem; return 301 https://$2$request_uri; } # Основний сервер server { listen 443 ssl http2; server_name ~^(www\.)?(.+)$; # ... } HSTS додаємо в основний сервер:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; Laravel: HTTPS в додатку
// AppServiceProvider + bootstrap/app.php public function boot(): void { if (app()->environment('production')) { URL::forceScheme('https'); } } ->withMiddleware(function (Middleware $middleware) { $middleware->trustProxies( headers: Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO, proxies: '*' ); }) Без trustProxies Laravel не бачить, що запит прийшов по HTTPS (Nginx → PHP по HTTP), і генерує HTTP-посилання. Це часта помилка, яка може коштувати тижнів індексації.
Apache: .htaccess
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] </IfModule> Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Cloudflare
У панелі Cloudflare: SSL/TLS → Edge Certificates:
- Always Use HTTPS → увімкнути
- HSTS → увімкнути, max-age 12 місяців
Перевірка коректності редиректу
Використовуйте curl з прапорами -I та -IL:
curl -I https://ваш-домен | grep -i strict curl -IL http://ваш-домен Має повернутися заголовок Strict-Transport-Security: max-age=63072000; includeSubDomains; preload. Очікується не більше одного редиректу 301 (з www на non-www і HTTP на HTTPS). Якщо редиректів більше або з'являється помилка, то ланцюжок не оптимізовано.
Як усунути mixed content?
Після налаштування редиректу перевірте консоль браузера на предмет блокувань. Використовуйте інструмент Screaming Frog для сканування — він знайде всі ресурси, що завантажуються по HTTP. Ми замінюємо протокол у базі даних або використовуємо Content-Security-Policy: upgrade-insecure-requests. Останній змушує браузер автоматично апгрейдити HTTP-запити до HTTPS. На одному з проектів це скоротило час ручного виправлення з 8 годин до 10 хвилин.
Порівняння конфігурацій для різних серверів
| Сервер | Швидкість налаштування | Гнучкість | Ризик помилок |
|---|---|---|---|
| Nginx | 15-30 хв | Висока | Низький (при правильному синтаксисі) |
| Apache | 10-20 хв | Середня | Середній (через контексти) |
| Cloudflare | 5 хв | Низька | Низький (налаштування через GUI) |
| Laravel | +10 хв | Середня | Високий (trustProxies часто забувають) |
Nginx обробляє редиректи на 30% швидше, ніж Apache — це в 1.3 рази менше навантаження на сервер.
Чек-лист: що перевірити після налаштування
| Крок | Команда / спосіб | Очікуваний результат |
|---|---|---|
| Перевірка HTTP → HTTPS | curl -I http://ваш-домен | Status 301, Location: https://... |
| Перевірка www → non-www | curl -I https://www.ваш-домен | Status 301 або одразу 200 |
| HSTS заголовок | curl -I https://ваш-домен | Strict-Transport-Security присутній |
| Mixed content | Відкрити в браузері, консоль | Немає блокувань |
| TrustProxies (Laravel) | Перевірити generated URL | Всі посилання https |
Що входить у налаштування під ключ
- Аудит поточної конфігурації: перевірка редиректів, HSTS, mixed content
- Налаштування сервера (Nginx/Apache) або Cloudflare
- Додавання HSTS з налаштуванням max-age і preload
- Виправлення mixed content у коді та базі даних
- Перевірка ланцюжка редиректів та SEO-метрик
- Документація по виконаних роботах
- Гарантія підтримки 30 днів після деплою
Процес роботи: від аудиту до деплою
- Аналітика: перевіряємо поточні редиректи, HSTS, mixed content, SEO-метрики.
- Проектування: обираємо схему (www vs non-www, піддомени), плануємо ланцюжок.
- Реалізація: налаштовуємо конфіги сервера, додаємо HSTS, оновлюємо додаток.
- Тестування: curl, browser console, SEO-інструменти (Screaming Frog).
- Деплой: викочуємо в продакшн з поступовим збільшенням max-age HSTS.
Строки та вартість
- Базове налаштування Nginx/Apache з HSTS — від 1 години, вартість від 3000 грн.
- Комплексне налаштування з Laravel, Cloudflare та усуненням mixed content — від 4 годин, вартість від 8000 грн.
- Економія на рекламному трафіку після міграції — до $500 на місяць.
- Оцінюємо проект безкоштовно. Пишіть у чат — проведемо аудит та підготуємо конфігурацію.
Згідно з документацією MDN HSTS







