Автор Тема: Настройка .htaccess для SEO  (Прочитано 4429 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Eugenious

  • Администратор
  • *****
  • Сообщений: 21
  • Карма: +3/-0
Настройка .htaccess для SEO
« : 09 Июль 2019, 12:35:33 pm »
Файл .htaccess работает только с сервером Apache. Выполняет множество полезных функций, которые описать займет не один день. Но в этой статье мы затронем правила необходимые для SEO-оптимизации.

1) Перенаправление с не безопасного протокола HTTP на безопасный протокол HTTPS. Работает только при наличии SSL-сертификата.
RewriteEngine On            #Подключает mod_rewrite для веб-сервера Apache. Пишется один раз.
RewriteCond %{HTTPS} off          #Условие, если HTTPS отключен, то делаем правило ниже
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]          #Если условие выше верно, применить это правило


2) Далее у нас идет настройка "301 Redirect". Она поможет избежать дублирования страниц в поисковиках. Не каждый из пунктов нужно выполнять, а только те, что вам необходимы. Вполне может быть, что разработчики позаботились об этом всем на стадии разработки.

Первое - нам нужно склеить адрес без www на www либо наоборот, так как example.uz и www.example.uz для поисковиков две разных страницы и они будут дублированы.
#С www на без www
RewriteEngine On          #Если уже есть в .htaccess, пропускаем эту строчку
RewriteCond %{HTTP_HOST} ^www.vash-site\.uz$ [NC]         #Если с www, выполняем правило ниже
RewriteRule ^(.*)$ http://vash-site.uz/$1 [R=301,L]       #Если условие верно, выполняем это правило. Если у вас перенаправление с http на https - RewriteRule ^(.*)$ https://vash-site.uz/$1 [R=301,L]
#Если нет www, ставим www
RewriteEngine On          #Если уже есть в .htaccess, пропускаем эту строчку
RewriteCond %{HTTP_HOST} ^vash-site\.uz$ [NC]         #Если без www, выполняем правило ниже
RewriteRule ^(.*)$ http://www.vash-site.uz/$1 [R=301,L]       #Если условие верно, выполняем это правило. Если у вас перенаправление с http на https - RewriteRule ^(.*)$ https://www.vash-site.uz/$1 [R=301,L]


Второе - убираем расширение .html с адресной строки, замечал такие адреса на CMS Joomla.
RewriteEngine On        #Если есть, пропускам
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.html [L]


Третье - когда главная страница доступна по двум адресам, что недопустимо http://site.uz и http://site.uz/index.php - убираем index.php
#Убираем index.php в URL
RewriteEngine On       #Если есть, пропускаем
RewriteCond %{THE_REQUEST} ^{A-Z}[3,9]\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://vash-site.uz/ [R=301,L]
#Этот код ставит "/" в конце адресной строки
RewriteEngine On       #Если есть, пропускаем
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

#Этот код убирает "/" в конце адресной строки
RewriteEngine On       #Если есть, пропускаем
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [L,R=301]


Четвёртое - убираем параметры с url. Обычно это происходит при перелистывании страниц одной категории, например в http://site.uz/catalog?page=1 параметром является page=1.
RewriteEngine On     #Если есть, пропускаем
RewriteCond %{QUERY_STRING} page=1       #в вашем случае может быть не page=1, а что-то другое, вообще все что после знака "?" и есть параметр
RewriteRule ^index.php http://vash-site.uz/catalog? [R=301,L]


Пятое - может вам и не понадобиться, если разработчики позаботились о ЧПУ ссылок до выхода сайта в продакшн или у вас новый сайт, который еще не продвинут в поисковиках. Это нужно для сайтов, которые уже занимают кое-какие значимые позиции, чтобы не потерять их при смене адреса.
RewriteEngine On     #Если есть, пропускаем
RewriteRule ^(.*)url.html$ http://vash-site.uz/new-url.html [R=301,L]       #Вписываете свой измененный адрес


Шестое - В том случае, когда вы меняете доменное имя, для поисковиков это совсем другой сайт получается. Для этого нам надо перенаправить с старого адреса сайта на новый.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.stariy-site\.uz$ [NC]
RewriteRule ^(.*)$ http://noviy-site.uz/$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^stariy-site\.uz$ [NC]
RewriteRule ^(.*)$ http://noviy-site.uz/$1 [L,R=301]


3) Настройка перенаправления на шаблон страницы 404 и 500 ошибки. Допустим вы загрузили в папку http://vash-site/pages/errors/ ваш шаблон 404 ошибки "404.php". Получается ваш адрес 404 ошибки будет http://vash-site/pages/errors/404.php
,но нам нужен такой путь - http://vash-site/404.php
ErrorDocument 404 http://vash-site.uz/404/
ErrorDocument 500 http://vash-site.uz/500/

RewriteEngine On      #Если есть, не пишем
RewriteCond %{REQUEST_URI} ^/404/$
RewriteRule ^(.*)$ /pages/errors/404.php [L]

RewriteCond %{REQUEST_URI} ^/500/$
RewriteRule ^(.*)$ /pages/errors/500.php [L]


4) Кэширование изображений и различных файлов в браузере на определённый срок. Оно используется для мгновенной загрузки страницы и получения хороших результатов в инструментах для оптимизации сайтов - https://developers.google.com/speed/pagespeed/insights/
Не советуется использовать если вы ведете какие либо изменения на сайте (например изменяете уже написанную статью или цену товара) так как изменения не будут видны клиентам пока кэш не обновится, а для благоприятного эффекта в инструментах оптимизации сайтов следует кэшировать на срок от месяца и выше.

Вариант №1
#Вы можете использовать для времени кэширования |second(s)|minute(s)|hour(s)|day(s)|week(s)|month(s)|yaer(s)
<IfModule mod_expires.c>
     ExpiresActive On    #Включаем кэширование
     ExpiresDefault "access plus 2 days"          #Задается время кэширования элементам, что не указаны ниже
     ExpiresByType image/jpg "access plus 1 year"        #здесь и ниже задается время кэширования определенного элемента
     ExpiresByType image/jpeg "access plus 1 year"
     ExpiresByType image/gif "access plus 1 year"
     ExpiresByType image/png "access plus 1 year"
     ExpiresByType text/css "access plus 1 year"
     ExpiresByType application/pdf "access plus 1 month"
     ExpiresByType application/x-font-woff " access plus 1 year"
     ExpiresByType application/x-font-woff2 "access plus 1 year"
     ExpiresByType application/x-font-ttf "access plus 1 year"
     ExpiresByType text/x-javascript "access plus 1 year"
     ExpiresByType application/x-shockwave-flash "access plus 1 year"
     ExpiresByType image/x-icon "access plus 1 year"
</IfModule>


Вариант №2
#Используется только если  хостинг поддерживает Apache
#Время считается в секундах например max-age=60 это минута.
<IfModule mod_expires.c>
     <filesMatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$">
          Header Set Cache-Control "max-age=2678000", public        #Если не чувствительно ко времени используем "public"
     </filesMatch>

     <filesMatch "\.(html|htm)$">
          Header Set Cache-Control "max-age=7200", private, must-revalidate        #must-revalidate долго объяснять, Google вам в помощь
     </filesMatch>

     <filesMatch "\.(pdf)$">
          Header Set Cache-Control "max-age=86400", public
     </filesMatch>

     <filesMatch "\.(js)$">
          Header Set Cache-Control "max-age=2678000", private          #Кэш используется для определенного пользователя отдельно при "private"
     </filesMatch>
</IfModule>
« Последнее редактирование: 08 Февраль 2023, 14:49:54 pm от Eugenious »
Всем Мира и Добра!