5+1 функция файла htaccess, о которых знают лишь избранные

На форумах SEO-оптимизаторы и вебмастера часто задают вопросы, которые решаются при помощи модификации .htaccess – файла настроек сервера Apache. В SEO это, главным образом, правила редиректов, но мощь .htaccess выходит далеко за пределы банальных перенаправлений.

Далее я расскажу 6 его полезных функциях, о которых не знает большинство SEO-специалистов.

1. Защита от хотлинкинга

Как правило, контент выкладывают в интернете, чтобы им делиться. Но бывают случаи, когда мы не хотим чтобы его использовали на других сайтах, пересылали в почте и тому подобное.

Полностью защититься от этого нельзя, но можно заблокировать хотлинкинг, то есть, прямые ссылки. Например, если кто-то будет отправлять прямую ссылку на ваш файл (фото, аудио или любой другой) в мессенджерах, почте, размещает файл у себя на сайте.

Весь механизм основан на проверке заголовка HTTP_REFERER, который можно интерпретировать как источник перехода. Если в источник – не ваш домен (в примере это https://seoshnik.ninja), файлы gif, jpeg, js, css и pdf ему не показываем.

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?seoshnik\.ninja [NC]
RewriteRule \.(gif|jpeg|js|css|pdf)$ - [F,NC,L]

В первой строке мы проверяем HTTP_REFERER на пустоту и разрешаем загрузку для пользователя с пустым значением. Это правило можно не использовать, но есть вероятность что контент не загрузится у пользователей с некоторыми антивирусами а также с браузерами, блокирующими HTTP_REFERER.

Во второй проверяем, наш ли домен запросил файл. Если в источник – не ваш домен (в примере это https://seoshnik.ninja), файлы gif, jpeg, js, css и pdf ему не показываем.

Если мы хотим позволить какому-то сайту брать наш контент, то просто добавим для него дополнительное условие, точно как для своего домена (в следующем примере это 3 строка с https://seoshnik.samurai ).

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?seoshnik\.ninja [NC]
RewriteCond %{HTTP_REFERER} !^https://(www\.)?seoshnik\.samurai [NC]
RewriteRule \.(gif|jpeg|js|css|pdf)$ - [F,NC,L]

Если нужно запретить хотлинкинг только для конкретных доменов, сделать это также не трудно. В примере это будут https://haker1.com и https://haker2.com.

RewriteCond %{HTTP_REFERER} ^https://(www\.)?haker1\.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^https://(www\.)?haker2\.com [NC]
RewriteRule \.(gif|jpeg|js|css|pdf)$ - [F,NC,L]

Обратите внимание, блокировка хотлинкинга не помешает пользователю зайти на ваш сайт, сохранить файлы на свое устройство и потом переслать их кому-либо.

2. Маскировка расширения файла

Вы можете скрыть расширение любого конкретного файла, указав в htaccess его тип в инструкции ForceType. Например, у вас есть файл seo.php, если вы укажете имени seo ассоциацию с нужным форматом, в ссылки можно будет не добавлять раcширение .php.

<Files seo>
	ForceType application/x-httpd-php5
</Files>

Вместо seo можно указать сразу несколько значений через пробел, или даже все страницы, при помощи символа “*”.

С помощью ForceType можно сделать и некоторые нестандартные решения. Допустим, у вас есть папка images с изображениями и вы хотите чтобы эти изображения открывались без указания расширения:

<Location /images>
ForceType image/gif
</Location>

Теперь все изображения в папке будут доступны без указания расширения. Например, изображение https://seoshnik.ninja/images/penguin.jpg будет также доступно по адресу https://seoshnik.ninja/images/penguin.

Это может быть полезно, например, если вы используете какие-то нестандартные форматы, и не хотите это особо афишировать.

3. Указание директив индексирования ПС, как в мета-теге robots, и каноничных ссылок как тег canonical

Все директивы (index, noindex, follow, nofollow, noarchive, nosnippet) мета-тега robots доступны для указания в .htaccess. Это может быть полезно, если вы не можете внести изменения в CMS,  robots.txt (например, файл автоматически перезаписывается системой администрирования). Или другими техническими проблемами.

Например, мы не хотим чтобы поисковые системы следовали по ссылкам, сохраняли в кэш и формировали сниппеты для файлов с расширением docx, но все-равно индексировали их. Для этого можно применить вот такую конструкцию с X-Robots-Tag:

<FilesMatch ".docx$">
Header set X-Robots-Tag "index, nofollow, noarchive, nosnippet"
</FilesMatch>

Таким же образом мы можем ограничить индексацию файлов нескольких типов:

<FilesMatch ".(doc|docx|pdf)$">
Header set X-Robots-Tag "index, nofollow, noarchive, nosnippet"
</FilesMatch>

Не многим известно, что каноничность можно указать не только html-странице, но и любому документу, например pdf или doc-файлу. Это полезно, например, если вы генерируете страницы для печати в формате pdf, добавляя к тексту элементы айдентики компании или водные знаки. 

Обычно, в таких случая файлы закрывают от индексации в robots.txt и становятся полностью бесполезными для SEO. Но вы можете пойти и другим путем, отправляя в заголовке файла информацию о каноническом адресе с помощью .htaccess: 

<Files article-about-seo.pdf>
Header add Link '<https://seoshnik.ninja/article-about-seo.php>; rel="canonical"'
</Files>

С помощью похожей директивы вы можете указать каноничные страницы, например,  сразу для всех pdf-файлов на сайте:

RewriteRule ([^/]+)\.pdf$ - [E=FILENAME:$1]
<FilesMatch "\.pdf$">
Header add Link '<https://seoshnik.ninja/%{FILENAME}e.php>; rel="canonical"'
</FilesMatch>

Теперь каждый pdf-файл указывает в качестве канонической страницу с таким же именем файла, но с расширением php.

4. Готовим сайт к неисправностям: собственные страницы ошибок и заглушка об обслуживании

Страницы ошибок 404, 403, 500 и им подобных обычно имеют очень примитивный дизайн, создаваемый CMS. Но вы можете создать свою страницу, и определить ее как страницу ошибки с помощью простых команд в .htaccess:

ErrorDocument 403 /forbidden403.php
ErrorDocument 404 /notfound404.php
ErrorDocument 500 /internal500.php

Когда вы проводите какие-либо значимые технические работы на сайте, иногда бывает разумно выставить заглушку, которая на время будет отображаться вместо страниц, сделать этом можно различными скриптами. Указанные ниже – один из самых лаконичных:

RewriteCond %{REMOTE_ADDR}  !0\.0\.0\.0
RewriteCond %{REMOTE_ADDR}  !127\.0\.0\.1
RewriteRule !offline.php$ https://seoshnik.ninja/offline.php [L,R=302]

В первой строке необходимо указать IP адрес администратора, которого мы будем допускать до работ (т.е. у него сайт будет открываться как раньше). Во второй строке – собственный, внутренний IP сервера, что снизит количество потенциальных проблем во время технических работ.

В третьей строке мы 302 редиректом перенаправляем всех остальных пользователей на страницу offline.php (если они уже не на ней).

Такие перенаправления рекомендуется ставить только на время самых критических работы, иначе есть вероятность что поисковая системы выкинут страницы из индекса.

5. Показываем поисковым системам, что мобильная версия страницы отличается

Если при отображении мобильной версии сайта URL страниц не изменяется, то есть вы генерируете на одних и тех же страницах различный код для разных устройств, нужно сообщить об этом поисковым роботам. Это поможет не получить санкции за подмену контента (клоакинг).

Для этого в заголовок страницы запишем значение Vary: User-Agent, показывающее, что контент варьируется в зависимости от User-Agent клиента:

Header append Vary User-Agent

Такой заголовок нужен только если код меняется на бэкенде в зависимости от устройства. Если же на сайте полноценная адаптивная верстка, добавлять его не следует.

Бонус. Добавляем в ответ сервера произвольное сообщение

Вы можете отправить в ответе сервера произвольное сообщение. Зачем? Вот простой пример.

SEO-компании часто анализируют сайты конкурентов, и эту работу они поручают достаточно квалифицированным людям. Почему бы не попробовать переманить ценного сотрудника к себе? Поступим оригинально и запишем приглашение в ответ сервера для страниц сайта:

Header set Hiring-Now "SEO-pro? Work for us, we pay more!"

Можно сразу добавить в сообщение email или аккаунт Телеграм и ждать новых работников. Кириллические символы использовать нельзя, но можно применить транслитерацию.

Как посмотреть возвращаемые сервером заголовки

Консоль разработчика, пожалуй, самый простой способ, не требующий использования сторонних сервисов. В большинстве браузеров ее можно вызвать клавишей F12 и комбинацией Ctrl+Shift+I.

Можно воспользоваться и онлайн-сервисами, наиболее популярные: 2ip, BE1, Bertal.

Добавить комментарий