Облачное хранилище

Редирект 301 различными способами

301 редирект позволяет посетителям и поисковым системам получить доступ к веб-странице после того, как та была перемещена на новый адрес. Если изменилось доменное имя вашего веб-сайта или изменились адреса файлов или страниц, то вам необходимо указать ссылки новых URL-адресов для посетителей и поисковых роботов. 301 постоянный редирект является наиболее дружественным для поисковой системы методом перенаправления на новый адрес или страницу и является текущим стандартом для целей SEO. Представляем вам инструкции, как закодировать 301 редирект, в зависимости от вашей системы.

301-redirekt

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/$1 [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)

  1. В диспетчере служб Интернета щелкните правой кнопкой мыши на файле или папке, которую вы хотите перенаправить через редирект.
  2. Выберите «Перенаправление на URL».
  3. Введите страницу перенаправления.
  4. Проверьте «точный адрес, введенный выше», и «постоянный адрес для данного ресурса».
  5. Нажмите кнопку «Применить».

Web.config 301 редирект

Первый пример будет перенаправлять отдельные страницы в новое местоположение. Например, важные страницы вашего сайта имеют .html расширения и вы хотите указать новое расположение с собственным каталогом, то есть без.html (http://domain.com/services.html изменится на http://domain.com/services/ ).

  1. Открываем web.config в каталоге, где находятся старые страницы
  2. Затем добавляем код для старого пути доступа и нового назначения следующим образом:
<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/$1 [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: изображение