новости
статьи
.sysadmin

как заставить поисковики возвращаться на сайт, после того как он был недоступен

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

Надеюсь, что вы не делаете с сайтом ничего такого, что может привести к большой задержке ответа, в то время, когда Google пытается
проиндексировать ваши страницы, так как, если Google получит ошибку 404 или 500, PageRank вашей страницы может прекратить свое существование. Как можно уведомить Googlebot и других поисковых ботов, что сейчас вы работаете над страницей и хотели бы, чтобы боты посетили сайт/страницу позже, например через 1 час? Я вам покажу, как это сделать.

Вот краткий рецепт из «Google Webmaster Central Blog, All About Googlebot»:

Вопрос: «Если мой сайт временно приостановлен, как мне сказать Googlebot, чтобы он вернулся позже для индексации страницы над которой я работаю?».

Ответ: «Вам следует настроить ваш сервер так, чтобы он возвращал статус 503 (Network Unavailable/сеть недоступна) вместо 200 (Ok). Это заставит Googlebot попытаться проиндексировать вашу страницу позже».

Как использовать эти знания?

Чтобы отправлять Google и другим поисковым ботам заголовок 503 Service Temporarily Unavailable мы будем использовать код mod_rewrite в файле .htaccess. Также мы будем отправлять заголовок Retry-After: 3600, который сообщит ботам, что им необходимо проверить страницу вновь через 3600 секунд (1 час), когда она будет уже доступна.

заголовок Retry-After

Заголовок Retry-After может быть использован с 503 ответом сервера (Сервис недоступен) для указания периода времени, в течение которого сервис будет не в состоянии отвечать на клиентские запросы. Этот заголовок также может быть использован вместе с любым 3хх (Redirection) ответом для указания минимального периода времени, по истечении которого клиент должен сделать redirect-запрос. Значением этого заголовка может быть либо HTTP-дата, либо целое число в секундах.

Синтаксис таков:

Retry-After = "Retry-After" ":" ( HTTP-date | delta-seconds )

Вот два примера использования:

Retry-After: Fri, 31 Dec 1999 23:59:59 GMT

Retry-After: 120


В последнем примере задержка равна 2 минутам.

отправка 503-ответа

Первый пример показывает, как настроить отправку 503-ответа только для GoogleBot:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^.*(Googlebot|Googlebot|Mediapartners|Adsbot|Feedfetcher)

-?(Google|Image)? [NC]

# или RewriteCond %{HTTP_USER_AGENT} ^.*google.* [NC]

RewriteRule .* /cgi-bin/error/503.php


А это отправка 503 ответа всем, кроме разработчика:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_HOST} !^1\.1\.1\.1
RewriteCond %{REQUEST_URI} !^/cgi-bin/error/503.php [NC]
RewriteRule .* /cgi-bin/error/503.php


Отправка поисковым ботам 503-ответа, а посетителям - страницы с информацией о причинах простоя:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^.*(Googlebot|Googlebot|Mediapartners|Adsbot|Feedfetcher)
-?(Google|Image)? [NC]
RewriteCond %{REQUEST_URI} !^/cgi-bin/error/503.php [NC]
RewriteRule .* /cgi-bin/error/503.php

RewriteCond %{REMOTE_HOST} !^1\.1\.1\.1
RewriteCond %{REQUEST_URI} !^/cgi-bin/error/404.php [NC]
RewriteRule .* /under-development-explain.html [R=302,L]


что такое 503 Service Temporarily Unavailable?

В данный момент сервер не может обработать запрос из-за временной перегрузки или из-за приостановки своей работы. Подразумевается, что это временное состояние, которое изменится через некоторое время. Продолжительность этой задержки может быть указана в заголовке Retry-After. Если заголовок Retry-After не предоставлен, тогда клиенту необходимо обработать этот ответ как 500.

код, выдающий ответ 503

Если вы поклонник PHP, вот вам код скрипта для выдачи 503 ответа на этом языке.
Примечание: если вы используете CGI-версию PHP, тогда вам необходимо отправлять заголовок Status дополнительно к HTTP/1.1, а если вы используете mod_php, тогда Status отправлять не надо.

<?php


ob_start();
header(‘HTTP/1.1 503 Service Temporarily Unavailable’);
header(‘Status: 503 Service Temporarily Unavailable’);
header(‘Retry-After: 3600');
header(‘X-Powered-By:’);

?><!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>

<html><head>
<title>503 Service Temporarily Unavailable</title>
</head><body>
<h1>Service Temporarily Unavailable</h1>
<p>The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.</p>
</body></html>


Если вы предпочитаете связку Perl + CGI – посмотрите следующий скрипт:

#!/usr/local/bin/perl

print<<"EOF";
Status: 503 Service Temporarily Unavailable\n
Content-Type: text/html; charset=UTF-8;\n
Retry-After: 3600\n\n

<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n
<title>503 Service Temporarily Unavailable</title>\n
</head><body>\n

<h1>Service Temporarily Unavailable</h1>\n<p>The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.</p>\n</body></html>
EOF




AskApache.com, перевод ApacheDev.ru
обсудить статью
© сетевые решения
.
.