301 перенаправление в .htaccess
Если файл .htaccess не существует, создайте новый файл без расширения после «.htaccess«, используя простой текстовый редактор (не забудьте поставить точку в начале имени файла). Для этих целей в Mac можно использовать BBEdit; для Windows— TextPad или Notepad++. Далее, загружаем его в корневой каталог вашего старого сайта. Обычно это директория /public_html или /WWW на сервере.
Примечание: ваш веб-сервер должен быть на системе Linux и должен быть включён модуль mod_rewrite Apache.
Добавляем следующее в .htaccess:
Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.new-site.com/\ [R=301,L]
Если вы решите изменить имена файлов отдельных страниц вашего сайта, вы можете перенаправить старые URL-адреса на новые URL с помощью следующей строки в качестве примера:
redirect 301 /old_page.html http://www.yourdomain.com/abc/new_page.html
PHP перенаправление
Header( "HTTP/1.1 301 Moved Permanently" ); Header( "Location: http://www.new-domain.com" );
В ASP
Открыть старe. веб-страницу и заменить всё её содержимое следующим кодом, заменив «www.new-location.com» на имя файла новой страницы:
<%@ Language=VBScript %> <% Response.Status="301 Moved Permanently" Response.AddHeader "Location", "http://www.new-location.com" %>
В ASP .NET
<script runat="server"> private void Page_Load(object sender, System.EventArgs e) { Response.Status = "301 Moved Permanently"; Response.AddHeader("Location","http://www.new-location.com"); } </script>
В IIS (на сервере Windows)
- В диспетчере служб Интернета щелкните правой кнопкой мыши на файле или папке, которую вы хотите перенаправить через редирект.
- Выберите «Перенаправление на URL».
- Введите страницу перенаправления.
- Проверьте «точный адрес, введенный выше», и «постоянный адрес для данного ресурса».
- Нажмите кнопку «Применить».
Web.config 301 редирект
Первый пример будет перенаправлять отдельные страницы в новое местоположение. Например, важные страницы вашего сайта имеют .html расширения и вы хотите указать новое расположение с собственным каталогом, то есть без.html (http://domain.com/services.html изменится на http://domain.com/services/ ).
- Открываем web.config в каталоге, где находятся старые страницы
- Затем добавляем код для старого пути доступа и нового назначения следующим образом:
<configuration> <location path="services.htm"> <system.webServer> <httpRedirect enabled="true" destination="http://domain.com/services" httpResponseStatus="Permanent" /> </system.webServer> </location> <location path="products.htm"> <system.webServer> <httpRedirect enabled="true" destination="http://domain.com/products" httpResponseStatus="Permanent" /> </system.webServer> </location> </configuration>
Вы можете добавить несколько путей нового местоположения по мере необходимости.
Второй пример перенаправляет весь каталог на новое место. Например, если вы хотитеhttp://domain.com/olddir/ перенаправить на http://domain.com/newdir/, нужно открытьweb.config и в /OLDDIR добавить следующую строку кода в раздел<system.webServer>:
<httpRedirect enabled="true" destination="http://domain.com/newdir" httpResponseStatus="Permanent" />
В ColdFusion
Добавьте следующее для страницы ColdFusion:
<.cfheader statuscode="301" statustext="Moved permanently"> <.cfheader name="Location" value="http://www.new-site.com">
JSP (Java) Redirect
<% response.setStatus(301); response.setHeader( "Location", "http://www.new-url.com/" ); response.setHeader( "Connection", "close" ); %>
CGI PERL Redirect
$q = new CGI; print $q->redirect("http://www.new-url.com/");
Ruby на Rails Redirect
def old_action headers["Status"] = "301 Moved Permanently" redirect_to "http://www.new-url.com/" end
Редирект с без WWW на WWW
Некоторые веб-мастера предпочитают перенаправить domain.com к www.domain.comдля целей поисковой оптимизации.
Каноническое перенаправление с помощью .htaccess
Добавьте следующие четыре строки в .htaccess, заменив ‘domain.com‘ на домен вашего сайта. Помните, что сайт для этого должен быть размещён на сервере Linux с Apache и включенным модулем Mod-rewrite.
Options +FollowSymlinks RewriteEngine on rewritecond %{http_host} ^domain.com [nc] rewriterule ^(.*)$ http://www.domain.com/\ [r=301,nc]
Канонический редирект с помощью IIS 7.0
Чтобы это работало, вам необходимо скачать и включить модуль URL Rewrite для IIS 7 (http://www.iis.net/learn/extensions/url-rewrite-module/using-the-url-rewrite-module). Тогда нужно использовать следующий код в файле web.config ASP.NET:
<configuration> <system.webServer> <rewrite> <rules> <rule name="Redirect to WWW" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^domain.com$" /> </conditions> <action type="Redirect" url="http://www.domain.com/{R:0}" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
301 редирект на WWW с без WWW
Наконец 301 перенаправление WWW на версию без WWW будет выглядеть так:
RewriteCond% {HTTP_HOST} ^ www.seobook.com [NC] RewriteRule ^ (. *) $ http://seobook.com/ $ 1 [L, R = 301]
Перенаправление всех страниц и файлов из папки к одной странице, файлу
Допустим, у вас больше нету множества страниц «product.*» и, следовательно, необходимо перенаправить все запросы к папке /product в одну страницу под названием /new-product.php. Этот редирект можно сделать очень легко, добавив следующий код в ваш файл .htaccess:
RewriteRule ^product(.*)$ /new-product.php [L,R=301]
Но что, если вы хотите сделать то же самое, что и в предыдущем примере за исключением одного файла? В следующем примере, все файлы из папки /product/будут перенаправлены на файл /new-product.php, КРОМЕ /product/tab.html, который будет перенаправен на /money.html
RewriteRule ^product/tab.html /money.html [L,R=301] RewriteRule ^product(.*)$ /new-product.php [L,R=301]
Перенаправление динамического URL на новый отдельный адрес
Если надо будет перенаправить динамический URL с параметрами на один статический адрес:
RewriteRule ^mutakc.jsp?id=(.*)$ /news.html [L,R=301]
В приведенном выше примере, запрос к динамическому URL, такой как http://www.domen.ru/mutakc.jsp?id=564654, будете перенаправлен на http://www.domen.ru/news.html
SSL HTTPS в HTTP
Это операция редиректа сложнее. Можно ощутить серьезные проблемы канонизации, когда защищенная версия HTTPS сайта полностью проиндексирована наряду с версией HTTP. Есть только два способа сделать перенаправление для этих различных протоколов:
- Создайте файл PHP и включите его в верхней части каждой страницы:
if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') { echo '<meta name="robots" content="noindex,nofollow">'. "\n"; }
- Указание в файле robots.txt. Если человек или один из известных ботов, таких как Googlebot, попадает на HTTPS то нужно будет отображать:
User-agent: * Disallow: /
В противном случае отображать нормальный robots.txt. Для этого вам нужно изменить ваш .htaccess, отображать .txt файлы как PHP или в другом динамическом языке, а затем приступить писать код маскировки.
Массовый переезд на новые URL
Во время переноса страниц на новые адреса, нужно перенаправить тонну страниц. Прежде всего это займет у вас много времени, чтобы прописать их в .htaccess, во-вторых — слишком много записей в .htaccess, как правило, замедляют Apache, и в-третьих — возрастает вероятность человеческой ошибки. Проще нанять программиста и сделать некоторые динамические перенаправления из кода.
В следующем примере показан код на PHP, но это легко сделать на любом другом языке. Допустим, вы перешли на новую систему и все файлы, которые значились в старом ID должны быть перенаправлены. Сначала создаём таблицу базы данных, которая будет содержать старые идентификаторы и новые URL для перенаправления:
old_id INT new_url VARCHAR (255)
Далее, напишем код для её заполнения своими старыми идентификаторами и вашими новыми URL-адресами.
Далее, добавляем следующую строку в .htaccess:
RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2
Затем создаём PHP файл redirectold.php, который будет обрабатывать 301 редирект:
<?php function getRedirectUrl($productid) { // Connect to the database $dServer = "localhost"; $dDb = "mydbname"; $dUser = "mydb_user"; $dPass = "password"; $s = @mysql_connect($dServer, $dUser, $dPass) or die("Couldn't connect to database server"); @mysql_select_db($dDb, $s) or die("Couldn't connect to database"); $query = "SELECT new_url FROM redirects WHERE old_id = ". $productid; mysql_query($query); $result = mysql_query($query); $hasRecords = mysql_num_rows($result) == 0 ? false : true; if (!$hasRecords) { $ret = 'http://www.vashsayt.ru/'; } else { while($row = mysql_fetch_array($result)) { $ret = 'http://www.vashsayt.ru/'. $row["new_url"]; } } mysql_close($s); return $ret; } $productid = $_GET["productid"]; $url = getRedirectUrl($productid); header("HTTP/1.1 301 Moved Permanently"); header("Location: $url"); exit(); ?>
Теперь все запросы к вашим старым URL-адресам будут проходить через redirectold.php который будет искать новые URL и возвращать ответ HTTP 301 редирект на новый URL.
Если вам нужна дальнейшая помощь в настройке 301 редиректа, то рекомендуется обратится к хостинг-провайдеру. Изменения в конфигурации сервера следует делать только опытным веб-мастерам. Saitoseoteka предлагает инструкции выше в качестве ориентира и не дает никаких гарантий относительно производительности веб-сайта.
Можете посмотреть инфографику о 301 редиректе от seoprofy: изображение