Оптимальный robots.txt - часть 2

7035
В первой части мы разобрали основы файлы robots.txt, теперь попытаемся понять как и что запрещать им для индексации.


Читая комментарии к прошлому посту, возникло ощущение что текст люди читают даже не наискось, а снизу вверх через 3 строчки. Еще раз кратко вспомним основные вещи:

1. User-agent

picaboo:
Прямое обращение к поисковому боту - приоритетнее общего обращения
Если вы пишите
Код PHP:
User-Agent: Googlebot
Allow: /

User-agent: Yandex
Allow: /

User-agent: * 
Disallow: /admin/
Disallow: /backups/

Диррективы будут обработаны Гуглом и Яндексом там, где было прямое обращение к ним, секция с "User-agent: *" ими будет проигнорированна в пересекающихся директивах, поскольку у нее меньший приоритет.

2. Директива Host

picaboo:
Директива Host должна быть последней, если она располагается в секции с "User-agent: *" , поскольку она есть в спецификации только бота Яндекса и остальные боты сочтут вашу секцию ошибочной и после этой директивы дальше в этой секции ничего не считают

Код PHP:
User-Agent: *
Host: ваш_сайт.com
Sitemap: http://ваш_сайт.com/sitemap.xml
В данном случае "Sitemap: http://ваш_сайт.com/sitemap.xml" не будет принято ботами, его прочитает только Яндекс. Остальные споткнуться на директиве Host

В конце кратко еще разберем основные ошибки в синтаксисе, есть очень хороший пример с несколькими ошибками, на нем и рассмотрим.

Итак, продолжим.


4. Запрещаем и Разрешаем индексацию. Директивы Allow и Disallow

Disallow - запрещает
Allow - разрешает

В данный момент директиву Allow поддерживают почти все боты, но нам важно что её стал поддерживать Яндекс (Гугл поддерживает изначально, так как это он её ввел)

Когда же и как их использовать? Раньше роботс составлялся из расчета того, что мы вносим в него все то что мы хотим запретить. В данный момент логика осталась прежней, мы в нем запрещаем.

Код PHP:
Disallow: /users/
мы запретили индексировать раздел сайта в урл которого начинается с /users/

Для чего же ввели директиву Allow ?

Код PHP:
Disallow: /users/
Allow: /users/Vasia_Pupkin
Для случаев когда нужно внутри закрытой от индексации директории, разрешить проиндексировать подраздел или страницу. У нас в примере закрыты от индексации профили пользователей, но мы разрешили проиндексировать профиль Vasia_Pupkin

Ввиду данной особенности, надо понимать что Allow имеет больший приоритет чем Disallow, поэтому когда вы пишите
Код PHP:
User-Agent: *
Allow: /
Disallow: /users/
то писать потом правила запрета бесполезно. Вы уже все разрешили. Все директивы "Disallow" будут проигнорированны.

Что нужно запрещать, а что разрешать?

Поисковый бот приходя на сайт, имеет ограниченное время и глубину индексирования сайта. Наша задача помочь ему не отвлекаться на ненужные страницы и проиндексировать как можно больше только того что нам нужно.

Запрещаем дубли страниц.

Дубли страниц негативно влияют на ранжирование сайта. Поисковик видит по нескольким адресам на сайте абсолютно идентичные страницы. В выдаче должна быть одна страница, остальные боту надо склеить с ней. Каким образом от вычислит более релевантную страницу среди идентичных - одному ему известно, но как показывает практика, это будет не та которая нам нужна smile Поэтому лучше ему сразу запретить индексировать все узкие места в системе, где возникают дубли контента.

- Если на сайт включена поддержка ЧПУ - то нужно запретить дубликаты контента которые возникают при обращении напрямую к index.php . Если на сайте есть компоненты в которых нет ЧПУ - то их надо разрешить

- Нужно запретить к индексации поиск по тегам, поскольку при обращении к тегам формируется страница с не уникальным контентом.

- Нужно запретить к индексации поиск по сайту.

Код PHP:
User-agent: * 
Disallow: *.php
Аllow: guestbook.php          #в качестве примера, открываем скрипт guestbook.php для индексации
Disallow: /search
Disallow: /forum/thread*-1.html #закрываем дубль первой страницы темы на форуме
Disallow: /login
Disallow: /registration
Disallow: /go/                #закрываем внешние ссылки
Disallow: /templates          #закрываем от индексации шаблон, там много мусора ввиде картинок, файла со стилями, скриптов. если скрипты есть где еще - лучше тоже прикрыть.
Disallow: /uploads            #закрываем файлы загруженные пользователями, можно и оставить открытыми.
Sitemap: http://ваш_сайт.com/sitemap.xml
Host: ваш_сайт.com 
Это минимальный файл robots.txt который нужен системе.


5. Ошибки

- Каждый блок не должен иметь пустых строк внутри, пустая строка считается разделителем между блоками.

Код PHP:
User-agent: * 
Disallow: /admin/
Disallow: /languages/
Disallow: /users/
Disallow: /core/


Host: ваш_сайт.com
Sitemap: http://ваш_сайт.com/sitemap.xml
Все что идет после "Disallow: /core/" не будет учтено.

- Неправильное указание User-agent. Название поискового бота нужно брать из спецификации поисковика

User-agent: Googlebot #верно
User-agent: googleBot #не верно синтаксически. по стандарту robots.txt нечувствителен к регистру, но принято писать правильно как в спецификации.
User-agent: google #не верно

- Указание нескольких дублирующихся User-agent. Будет учтен только первый - остальные проигнорированы

Код PHP:
User-Agent: Googlebot
Allow: /


User-agent: Yandex
Allow: /

User-Agent: *       #учтен
Allow: /

User-agent: *       #проигнорирован
Disallow: /admin/
- Отсутствие слешей при указании директории. Если нет слешей, то будет воспринято как имя файла и как директория.

Код PHP:
User-agent: * 
Disallow: /news/       # - запрещена директория "news"
Disallow: news         # - запрещено всё где встретится "news", например /games/gameloft-[b]news[/b].html
- Отсутствие инструкции к директиве Disallow. В случае когда нам нужно использовать дополнительную директиву и нам нечего запрещать, по стандарту мы все равно должны вставить Disallow, иначе робот может проигнорировать секцию как пустую.
Код PHP:
User-agent: Yandex
Disallow:                 # - без этой строки неправильно. эта строка ничего не запрещает
Host: ваш_сайт.com
- Директива Host. Она работает только для Яндекса, поэтому самый правильный вариант вынести её в отдельную секцию, как описано в примере выше. Если мы выносим её в общую секцию, то она должна идти самой последней, так как роботы которые по спецификации её не поддерживают - не будут считывать данные в секции после нее.

Код PHP:
User-agent: * 
Disallow: *.php
Аllow: guestbook.php 
Disallow: /search
Disallow: /forum/thread*-1.html 
Disallow: /login
Disallow: /registration
Disallow: /go/ 
[s]Host: ваш_сайт.com [/s]      # - неправильно, всё что ниже этой строки не будет считано
Sitemap: http://ваш_сайт.com/sitemap.xml
Host: ваш_сайт.com              # - правильно. если бот не поддерживает диррективу host, то он при ошибке дальше не будет считывать секцию, а у нас там и так больше ничего нет.
Host: http://www.ваш_сайт.com/ # - неправильно, потому что нельзя указывать гиперссылку

-----------------------------------------------

И под конец, немного троллинга :)
Многие вебмастера рады стараться настолько, что пишут в роботс не только что нужно, но и все что не нужно.

Указывать или нет, запрет на индексацию админки сайта, директории с бекапом базы данных, директорию с кэшем движка?
Поговорим об этом? :)
Оптимальный robots.txt | Запрет открытия сайта во фрейме
Комментарии (52)
letsgo 1 февраля 2012 в 14:13 -1
а если попробовать поэкспериментировать) например зачем закрывать вот это
soxom 1 февраля 2012 в 16:31 0
Не думаю, что удачное решение... Тэги лучше всего закрыть. Хотя я понимаю к чему вы клоните. Но в данном случае, мы получим дубли, но в поиске не вылезем. Поэтому закрываем до лучших времен
letsgo 1 февраля 2012 в 16:51 -1
Дубль в чем? Суть в том, что страница получается достаточно релеватная, и с уникальным собственно контентом, эдакий сборник релевантной информации. Хотя пока не уверен, но в поиске такие страницы все же очень хорошо пролетают в топ. Есть дубль этой страницы ?
picaboo 1 февраля 2012 в 16:58 +1
боту нужен текст. если страница состоит из ссылок - лучше не надо давать ему эту страницу :)
letsgo 1 февраля 2012 в 17:27 -1
Я довольно часто встречал заходы с топа, когда смотришь запрос а он как раз таки и состоит из тега и ответа на него в количестве 10 страниц. Смотрю и ведь действительно релеватно, я это к чему, к тому, что возможно не строго прямо надо закрывать теги, можно пробовать и не закрывать и смотреть результат.
picaboo 1 февраля 2012 в 17:32 0
я у себя не закрываю, но я разбавляю немного текстом
picaboo 1 февраля 2012 в 16:55 0
да не факт. если чуть поднапрячься и добавить тексту - то можно и не закрывать
instantcms.ru%2Fsearch%2Ftag%2F " target="_blank">http://yandex.ru/yandsearch?text=&lr=2&site=instantcms.ru%2Fsearch%2Ftag%2F - вот так конечно выглядит забавно и лучше закрыть от греха :)
picaboo 1 февраля 2012 в 16:56 0
picaboo 1 февраля 2012 в 16:57 0
еще попытка

парсер паразит режет :)
soxom 1 февраля 2012 в 23:44 0
Ребята, вы из прошлого века? Сейчас очень осторожно нужно относиться к подобным экспериментам... Если получиться, что ваш сайт вылезет и станет получать хороший трафик, то это может сыграть не в вашу пользу. Вот, советую почитать - http://ain.ua/2011/08/03/54876
letsgo 2 февраля 2012 в 00:55 -2
Заговор врагов я так понимаю?) Как связать ваш пост с тем, что мы обсуждали выше, не подскажете?)
picaboo 2 февраля 2012 в 01:07 0
да. мне чуть больше 12 лет - я из прошлого века :)

ок. с инет магазинами работали? много позиций товара, под каждый страница, куча конкурентов с таким же товаром... намек поняли в какую я сторону?
soxom 2 февраля 2012 в 11:09 0
Я как раз сейчас веду несколько магазинов ))) Не нужно мне рассказывать такие детали... Просто не стоит, думаю, ставить такие эксперименты, они не дадут суперского эффекта, а вот проблемы могут создать.
Что касается летсгоу, то уже не раз просил - не читайте между строк... У вас на сайте будет слишком много дублей, страница тэгов, это как раз та страница, которую двигать. В Инстанте, тэги чтобы двигать нужно либо полностью переделать (сделать что-то похожее на категории), с уникальным текстом в каждом + нормальным урлом, либо закрыть.
reload 1 февраля 2012 в 14:24 0
не совсем уверен, но не закроет ли эта запись:
Disallow: /forum/thread*1.html #закрываем дубль первой страницы темы на форуме
также страницы:
thread-11.html
thread-21.html
и т.д.
?
picaboo 1 февраля 2012 в 14:41 0
тире пропустил smile счас добавлю.

Disallow: /forum/thread*-1.html
reload 1 февраля 2012 в 14:32 0
и еще вопрос) есть ли смысл закрывать от индексации страницы которые являются 100% ым дублем?
или все же выгодней их клеить?
Просто ссылок, якобы много на эту страницу может быть, а мы ее закроем и вес она не получит. Я думаю что правильней 100% ые дубли редиректить, хотя могу и ошибаться)
picaboo 1 февраля 2012 в 14:48 0
конечно правильнее smile другой вопрос что этих дублей вообще не должно быть. :(
reload 1 февраля 2012 в 15:47 0
ну думаю с последним могут и послать в мягкой форме)) так что лучше самому допиливать) Нас здесь много - вот и подскажем и поможем друг другу. Главное знать где косяки - а как убрать их, придумаем)
picaboo 1 февраля 2012 в 15:58 0
я инстант не пользую почти, поэтому про дубли знаю мало smile
можно сделать на форуме тему и собрать все дубли там и уже к ним сделать патч с редиректами и роботсом.
soxom 1 февраля 2012 в 16:28 0
В целом неплохая получилась статья, но есть мысли ))
1) Мы обсуждали уже конструкцию с дублями страниц на форуме (кстати и в блогах и статьях есть такая же проблема). Можно было либо запретить в роботсе, но потерять внутренний вес (немного, но все же), либо склеить 301 редиректом. Очень хорошее решение данной проблемы дал пивуа, его редирект можно использовать не только на форуме, но и в блогах и в статьях и фотогалереи, одним словом везде где есть подобные дубли. Так вот, если мы поклеим страницы 301 редиректом и напишем в роботсе запрет на их индексацию, то мы просто могли бы и не клеить... Так как робот все равно не перейдет по данной ссылке и не увидит 301... То есть, мы ставим либо 301, либо запрещаем в роботсе, но никак не вместе
2) Что касается дублей, то поверьте, в Инстанте их минимум (я сам новичок в данном движке и пока далеко не во всем разобрался, но это я вижу)... Я работал со многими движками и уж поверьте, там дубли на каждом шагу ))) Вы наверное их просто не замечаете... Но они точно есть )))
picaboo 1 февраля 2012 в 16:39 0
1. В вашем топике же поливали меня грязью за то что я утверждал что редирект лучше чем закрыть роботсом и потерять ссылочное:) ну не суть.

редирект предпочтительнее, но редирект сложнее делать. я же не писал роботс чтобы его в дистрибутив вставили smile я лишь расписал ошибки которые знаю и дал примеры как можно делать. роботс каждый сам под себя делает, под конкретные задачи. согласитесь что для интернет магазина и блога на одном движке роботсы будут кардинально разные :)

вообще редирект это крайняя мера, если есть редирект, значит движок сработал неправильно и этот костыль исправляет багу. поэтому лучше исправить мод который генерирует ошибку, чем плодить редиректы

2. дубли есть везде, просто они не очевидны.

к примеру у этого топика дубль (и не один)
http://instantcms.ru//blogs/raznye-melochi/optimalnyi-robots-txt-chast-2.html#c29066
и вроде как тоже надо закрыть :)
picaboo 1 февраля 2012 в 16:41 0
В вашем топике же поливали меня грязью за то что я утверждал что редирект лучше чем закрыть роботсом и потерять ссылочное:) ну не суть.
*закрыть редиректом, а не роботсом
soxom 1 февраля 2012 в 23:46 0
Насчет первого пункта я просто пояснил ))) Знаю что вы сами знаете. Что касается второго, то решетка - это не дубль
picaboo 2 февраля 2012 в 00:56 0
решетка - это не дубль

провокация не удалась sad смайлик в конце фразы меня выдал :(
soxom 2 февраля 2012 в 11:10 0
И что вы хотели меня подловить этим? Глупо, не кажется?
picaboo 1 февраля 2012 в 14:55 +3
Что бы не было вопросов - покажи свой роботс :))

User-agent: *
Disallow: /
Allow: /news/
Allow: /content/
Allow: /foto/
Sitemap: http://site.ru/sitemap.xml
Host: site.ru
Soviet-Girl 2 февраля 2012 в 00:25 0
А как закрыть поиск по тегам в каталоге?

Так: Disallow: /catalog/*/tag/* ??
picaboo 2 февраля 2012 в 00:46 +1
каталог не юзал - структуру не понимаю. нужно пример урла который надо закрыть.
◦ Ӎɑƙҫиӎ ◦ Ᵽɑɗиớӊớβ 2 февраля 2012 в 00:28 0
Покажу свой,может я каких ошибок и не заметил,буду рад адекватным советам.
Да и может кому пригодится)
Спойлер
picaboo 2 февраля 2012 в 00:42 0
восхищен !! :)


можно было сделать
User-agent: *
Disallow: /

и убрать все секции кроме яндекса и гугла. эффект тот же, только файл в 50 раз меньше.

сайт мап и хост должны принадлежать какой либо секции. по уму надо сайт мап добавить в гугловскую и яндекс. а хост только в яндекс добавить и все.
◦ Ӎɑƙҫиӎ ◦ Ᵽɑɗиớӊớβ 2 февраля 2012 в 00:53 0
Ну зачем же
User-agent: *
Disallow: /
crazy
С этим роботсом в яше 500 и в гугле 1200 страниц в индексе,и много в топе)
сайт мап и хост должны принадлежать какой либо секции
так и было,но при анализе роботса на яндексе он показывал четыре ссылки на карту сайта,потому перенёс в конец,как и хост,чтоб не стопорил он других ботов.Сам не пойму,как лучше сделать.
picaboo 2 февраля 2012 в 01:02 0
роботс на топ не влияет. почти.

нет, без шуток
User-agent: *
Disallow: /

заменит перечисление всей кучи ботов. у вас будет запрет доступа к сайту всем кроме оставленных


примерно так
◦ Ӎɑƙҫиӎ ◦ Ᵽɑɗиớӊớβ 2 февраля 2012 в 01:14 0
можно,но пусть останется пока так,есть ещё рамблер,бинг,яхху и т п
soxom 2 февраля 2012 в 11:12 0
Про рамблер забудьте он как поисковик уже помер, бинг и яху не приносят нормальный трафик на территории СНГ...
picaboo 2 февраля 2012 в 12:04 0
Яху вроде как уже тоже того smile беки не проверить :(
soxom 2 февраля 2012 в 11:13 0
Роботс прямо на ТОП не влияет, но косвенно даже очень. Хотя, на мой взгляд, тема с роботсом, если честно, раздута до безобразия )))
picaboo 2 февраля 2012 в 00:43 0
ну и чисто для статистики:

- часто поисковый бот в админку лезет и в кеш? а в бекапы сайта?

- статьи-фотки добавляет часто? регается? записи на стену?
Lana 2 февраля 2012 в 13:49 0
А можно спросить, возможно вопрос очень ньюбский, сорри )
А можно как-то закрыть доступ ботам или программам, которые парсят RSS (ну коментарии те же скажем) - чем не источник уникального контента для всяких граберов.
Ну тоесть если заход с броузера, то RSS пожалуйста, если чего-то с какого-то сервера запрашивает, то отворот поворот?
picaboo 2 февраля 2012 в 14:45 +1
роботсом не закрыть
Lana 2 февраля 2012 в 15:31 0
Ясно, спасибо! Но реализуемо вообще практически?
Или это слишком сложно, проще вообще RSS поотключать?
picaboo 2 февраля 2012 в 15:40 +1
можно сделать условие на php чтобы проверять юзер агента и отдавать пустой файл. но тут заковыка в том что граберы все используют юзер-агент броузеров основных и поэтому практически бесполезно.
Rainbow 7 февраля 2012 в 20:16 0
soxom

Начало топика это наверно из моего файла:
User-Agent: Googlebot Allow: / User-agent: Yandex Allow: / User-agent: * Disallow: /admin/ Disallow: /backups/

В Первом Вашем блоге пришел к некоторым выводам и проверил их по сети, изменил файл после сегодняшнего ночного апа
пропали ошибки, уже сказал тема нужная, но как Вы правильно заметили:
Читая комментарии к прошлому посту, возникло ощущение что текст люди читают даже не наискось, а снизу вверх через 3 строчки.
Олег Васильевич я 17 апреля 2012 в 13:35 0
здравствуйте!
Помогите, пожалуйста с robots:
Код PHP:
User-agent: *
Disallow: /users/
Disallow: /upload/
Disallow: /search/
Disallow: /login/
Disallow: /*?
Disallow: */index.php
Пытался закрыть пользователей и страницы типа www.сайт.org/?iblock=17&element=2040
К сожалению, и пользователи и страницы с ? проидексированы гуглом просто на ура zlo
Подскажите, что сделал неправильно и как их убрать из индекса.
Спасибо!
picaboo 17 апреля 2012 в 15:42 0
Disallow: /?iblock=*
Олег Васильевич я 17 апреля 2012 в 16:23 0
Disallow: /?iblock=*
Добавить эту строку?
Спасибо!
picaboo 17 апреля 2012 в 16:27 +1
Если надо закрыть именно тот урл что выше, то да, просто добавить
Олег Васильевич я 17 апреля 2012 в 16:50 0
Спасибо!
А не подскажете что не так прописал для пользователей?
picaboo 17 апреля 2012 в 17:03 0
Все так кроме 7 строки, она странная joke звездочку лучше поставить после, а не до. Тогда получится что запрещены все урлы которые начинаются с index.php
Олег Васильевич я 17 апреля 2012 в 21:21 +1
Так
Код PHP:
Disallow: /*index.php
или так
Код PHP:
Disallow: /index.php*
Вы уж простите что всё переспрашиваю - обжёгся уже.
Спасибо!
picaboo 27 апреля 2012 в 22:57 +3
это два разных случая. в первом закрывается любой урл в конце которого последним идет index.php, а во втором случае любой урл который начинается с index.php

решайте сами что вы хотите закрыть в своем конкретном случае
Олег Васильевич я 27 апреля 2012 в 23:39 0
Спасибо!
GluK 6 декабря 2014 в 11:04 0
Подскажите, для 2.1.2 этого достаточно?
Код PHP:
  1. User-agent: *
  2. Disallow: /templates
  3. Sitemap: http://www.site.ru/cache/static/sitemaps/sitemap.xml
  4. Host: www.site.ru