Технический SEO⚙️

.htaccess для SEO: редиректы, кеш и защита от копирования

Практические правила .htaccess для SEO-оптимизации: 301-редиректы (www, https, slashes), gzip-сжатие, кеш-заголовки, защита от хотлинка и базовая безопасность.

SAКоманда SEOAdmin·24 апреля 2026 г.·7 мин чтения

Что такое .htaccess и когда он работает

.htaccess — это конфигурационный файл сервера Apache (или совместимого LiteSpeed). Кладётся в корень сайта или в подпапку. Действует на ту папку и всё ниже.

Если у вас nginx.htaccess не работает, всё настраивается в основном nginx.conf. Если Bitrix на нем работает — Apache используется как обработчик за nginx-фронтендом, и .htaccess нужен.

Когда использовать:

  • Общий хостинг (Beget, REG.RU, Timeweb) — там обычно Apache, .htaccess стандартный путь.
  • Bitrix-проекты — встроенный .htaccess от платформы.
  • WordPress на shared hosting — .htaccess управляет permalinks и редиректами.

Когда НЕ нужен:

  • VPS с nginx-only — настраиваем nginx.conf.
  • Next.js / Vite SPA на CDN — там middleware или edge-функции.

Основные сценарии .htaccess для SEO

1. Редирект с www на без www (или наоборот)

Без редиректа www.example.com и example.comдва разных сайта для поисковика, ссылочный вес делится.

С www → без www:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Без www → с www:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !=localhost [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

Выбор между www и без www — индивидуальный. Google не предпочитает один формат. Главное — выбрать один и редиректить всё на него.

2. Редирект с http на https

После установки SSL-сертификата (см. гайд по SSL):

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

301 — обязательно. 302 не передаёт SEO-вес.

3. Редирект со слешем / без слеша

/blog/article/ и /blog/article — для Apache одинаковые страницы (обычно). Для SEO — потенциальный дубль.

Решение — выбрать формат и редиректить:

Добавить слеш в конце:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/])$ /$1$2/ [R=301,L]

Убрать слеш в конце:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

WordPress, OpenCart — обычно со слешем. Bitrix — без слеша.

4. Редирект конкретных URL (после редизайна)

Когда меняете URL-структуру, нужно сохранить SEO старых страниц через 301:

Redirect 301 /old-page /new-page
Redirect 301 /staraya-statya /novaya-statya
Redirect 301 /catalog/phones /catalog/smartfony

Или массово через RewriteRule:

RewriteRule ^old-catalog/(.*)$ /new-catalog/$1 [R=301,L]

5. Gzip-сжатие

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
  AddOutputFilterByType DEFLATE application/javascript application/x-javascript application/json
  AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
  AddOutputFilterByType DEFLATE image/svg+xml font/ttf font/otf font/woff font/woff2
</IfModule>

Эффект: HTML/CSS/JS трафик меньше на 60-80%. Проверка — в HTTP-проверке заголовок Content-Encoding: gzip.

6. Кеш-заголовки для статики

<IfModule mod_expires.c>
  ExpiresActive On

  # Картинки кешировать на год
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType image/svg+xml "access plus 1 year"

  # CSS / JS на месяц
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"

  # Шрифты на год
  ExpiresByType font/woff "access plus 1 year"
  ExpiresByType font/woff2 "access plus 1 year"

  # HTML не кешировать (всегда свежий)
  ExpiresByType text/html "access plus 0 seconds"
</IfModule>

<IfModule mod_headers.c>
  <FilesMatch "\.(jpg|jpeg|png|gif|webp|svg|css|js|woff|woff2)$">
    Header set Cache-Control "public, max-age=31536000, immutable"
  </FilesMatch>
</IfModule>

Эффект: второй и последующий заходы — практически мгновенные. Сильно влияет на CWV и метрики возврата.

7. Защита от хотлинка картинок

Чтобы другие сайты не «крали» ваши картинки, вставляя их через img-теги:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC]

Замените example.com на свой домен. Картинки будут открываться только при заходе с вашего сайта.

8. Запрет индексации служебных папок

Хотя robots.txt стандарт, дополнительно можно отдать X-Robots-Tag через сервер:

<FilesMatch "\.(pdf|docx|xlsx)$">
  Header set X-Robots-Tag "noindex"
</FilesMatch>

Все скачиваемые документы — не в индекс поисковика.

9. Кастомные страницы ошибок

ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

Лучше отдавать «человеческие» 404 с поиском по сайту и ссылками на популярные разделы, чем стандартное «Not Found».

10. Запрет доступа к чувствительным файлам

<Files ".env">
  Order allow,deny
  Deny from all
</Files>

<FilesMatch "\.(sql|log|conf|bak)$">
  Order allow,deny
  Deny from all
</FilesMatch>

Защищает от случайного доступа к конфигам и бекапам через прямой URL.

Типичные ошибки

1. Слишком много правил → 500-я ошибка

.htaccess исполняется на каждый запрос. Чем больше правил, тем медленнее. Если правила синтаксически неправильны — сервер отдаёт 500.

Решение: проверяйте после каждого изменения. Один синтаксис ошибки = сайт лежит.

2. Цепочки редиректов

http://www.example.com/pagehttps://www.example.com/pagehttps://example.com/page — два редиректа подряд. Поисковик может «бросить» цепочку.

Решение: одним правилом сразу на финальный URL:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

3. Редирект-петля

/old → /new → /old. Сайт ложится в бесконечный 301. Браузер показывает «ERR_TOO_MANY_REDIRECTS».

Решение: перед каждым RewriteRuleRewriteCond ограничивающий триггер.

4. 302 вместо 301

Redirect 302 не передаёт SEO-вес. Поисковик считает редирект «временным». В .htaccess по умолчанию 302, нужно явно указывать 301:

Redirect 301 /old /new
RewriteRule ... [R=301,L]

5. Конфликт с CMS

WordPress, OpenCart, Bitrix имеют свои блоки в .htaccess. Никогда не трогайте строки между # BEGIN WordPress и # END WordPress — CMS их перезаписывает.

Ваши правила добавляйте выше или ниже этих блоков.

Проверка после изменений

  1. Откройте сайт — он работает? Если нет — .htaccess сломан, откатывайте.
  2. Проверка HTTP-заголовков — увидите gzip, cache-control, https.
  3. Проверка редиректов — для нового URL должен быть прямой 200, для старого — 301 → новый.
  4. Скорость: тест скорости — должен ускориться (благодаря gzip и кешу).
  5. Search Console через 7-14 дней — отсутствие новых 4xx/5xx ошибок.

Что делать дальше

  1. Сделайте резервную копию текущего .htaccess — на случай если что-то сломаете.
  2. Добавьте 4 базовых правила: редирект на https, выбор www, gzip, кеш-заголовки.
  3. Откройте сайт — проверьте что работает.
  4. Проверьте HTTP-заголовки — должны появиться Content-Encoding: gzip, Cache-Control: max-age=..., статус 301 для редиректов.
  5. Сгенерируйте .htaccess — наш онлайн-конструктор соберёт готовый файл под вашу CMS и нужные опции.

.htaccess — это «панель управления» поведением Apache. Один файл решает половину технических задач SEO: редиректы, скорость, кеш, безопасность. Час на правильную настройку = годы корректной работы сайта.

🚀

Попробовать SEOAdmin бесплатно

30 SEO-инструментов в одном кабинете. 100 поинтов бесплатно при регистрации, без карты.

Читайте также