Forum@HOST
SEO и реклама => Продвижение сайта в поисковых системах => Тема начата: Eugenious от 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 (http://www.site.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) и http://site.uz/index.php (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 (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/ (http://vash-site/pages/errors/) ваш шаблон 404 ошибки "404.php". Получается ваш адрес 404 ошибки будет http://vash-site/pages/errors/404.php (http://vash-site/pages/errors/404.php) ,но нам нужен такой путь - http://vash-site/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/ (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>