Использование robots.txt

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
Использование robots.txt
Директива User-agent.
Использование директив Disallow и Allow.
Использование спецсимволов "*" и "$".
Директива Sitemap.
Директива Host.
Директива Crawl-delay.
Директива Clean-param.
Дополнительная информация.
Директива User-agent.
Управлять доступом робота Яндекса к вашему сайту вы можете при помощи файла robots.txt, который должен быть размещен в корневой директории сайта. Робот Яндекса поддерживает стандарт описания http://www.robotstxt.org/wc/norobots.html с расширенными возможностями, описанными ниже.
В роботе Яндекса используется сессионный принцип работы, на каждую сессию формируется определенный пул страниц, которые планирует закачать робот. Сессия начинается с закачки robots.txt сайта, если его нет, он не текстовый или на запрос робота возвращается HTTP-код отличный от '200', считается, что доступ роботу не ограничен. В самом robots.txt проверяется наличие записей, начинающихся с 'User-agent:', в них ищутся подстроки 'Yandex', либо '*' (регистр значения не имеет), причем, если обнаружено 'User-agent: Yandex', директивы для 'User-agent: *' не учитываются. Если записи 'User-agent: Yandex' и 'User-agent: *' отсутствуют, считается, что доступ роботу не ограничен.
Использование директив Disallow и Allow.
Чтобы запретить доступ робота к некоторым частям сайта или сайту целиком, используйте директиву 'Disallow'. Примеры:
User-agent: Yandex
Disallow: / # блокирует доступ ко всему сайту
User-agent: Yandex
Disallow: /cgi-bin # блокирует доступ к страницам начинающимся с '/cgi-bin'
Примечание:
Недопустимо наличие пустых переводов строки между директивами 'User-agent' и 'Disallow' ('Allow'), а также между самими 'Disallow' ('Allow') директивами.
Кроме того, в соответствии со стандартом перед каждой директивой 'User-agent' рекомендуется вставлять пустой перевод строки.
Символ '#' предназначен для описания комментариев. Все, что находится после этого символа и до первого перевода строки не учитывается.
Чтобы разрешить доступ робота к некоторым частям сайта или сайту целиком, используйте директиву 'Allow'. Примеры:
User-agent: Yandex
Allow: /cgi-bin
Disallow: /
# запрещает скачивать все, кроме страниц начинающихся с '/cgi-bin'
Совместное использование директив.
Если для данной страницы сайта подходит несколько директив, то выбирается первая в порядке появления в выбранном User-agent блоке. Примеры, если:
User-agent: Yandex
Allow: /cgi-bin
Disallow: /
# запрещает скачивать все, кроме страниц начинающихся с '/cgi-bin'
User-agent: Yandex
Disallow: /
Allow: /cgi-bin
# запрещает скачивать весь сайт
Директивы Allow-Disallow без параметров.
Отсутствие параметров у директивы трактуется следующим образом:
User-agent: Yandex
Disallow: # тоже что и Allow: /
User-agent: Yandex
Allow: # тоже что и Disallow: /
Использование спецсимволов "*" и "$".
При указании путей директив Allow-Disallow можно использовать спецсимволы '*' и '$', задавая, таким образом, определенные регулярные выражения. Спецсимвол '*' означает любую (в том числе пустую) последовательность символов. Примеры:
User-agent: Yandex
Disallow: /cgi-bin/*.aspx # запрещает '/cgi-bin/example.aspx' и '/cgi-bin/private/test.aspx'
Disallow: /*private # запрещает не только '/private', но и '/cgi-bin/private'
Спецсимвол '$'.
По умолчанию к концу каждого правила, описанного в robots.txt, приписывается '*', например:
User-agent: Yandex
Disallow: /cgi-bin* # блокирует доступ к страницам начинающимся с '/cgi-bin'
Disallow: /cgi-bin # то же самое
чтобы отменить '*' на конце правила, можно использовать спецсимвол '$', например:
User-agent: Yandex
Disallow: /example$ # запрещает '/example', но не запрещает '/example.html'
User-agent: Yandex
Disallow: /example # запрещает и '/example', и '/example.html'
User-agent: Yandex
Disallow: /example$ # запрещает только '/example'
Disallow: /example*$ # так же, как 'Disallow: /example' запрещает и /example.html и /example
Директива Sitemap.
Если вы используете описание структуры вашего сайта в формате sitemaps.xml, и хотите, чтобы робот узнал о ней, укажите путь к sitemaps.xml, в качестве параметра директивы 'Sitemap' (если файлов несколько, укажите все), примеры:
User-agent: Yandex
Allow: /
Sitemap: http://mysite.ru/site_structure/my_sitemaps1.xml
Sitemap: http://mysite.ru/site_structure/my_sitemaps2.xml
или
User-agent: Yandex
Allow: /
User-agent: *
Disallow: /
Sitemap: http://mysite.ru/site_structure/my_sitemaps1.xml
Sitemap: http://mysite.ru/site_structure/my_sitemaps2.xml
Робот запомнит пути к sitemaps.xml, обработает файлы и будет использовать результаты при последующем формировании сессий закачки.
Директива Host.
Если ваш сайт имеет зеркала, специальный робот зеркальщик определит их и сформирует группу зеркал вашего сайта. В поиске будет участвовать только главное зеркало. Вы можете указать его у всех зеркал при помощи robots.txt, используя директиву 'Host', определив в качестве ее параметра имя главного зеркала. Директива 'Host' не гарантирует выбор указанного главного зеркала, тем не менее, алгоритм при принятии решения учитывает ее с высоким приоритетом. Пример:
#Если www.glavnoye-zerkalo.ru главное зеркало сайта, то robots.txt
#для всех сайтов из группы зеркал выглядит так
User-Agent: *
Disallow: /forum
Disallow: /cgi-bin
Host: www.glavnoye-zerkalo.ru
Важно: в целях совместимости с роботами, которые не полностью следуют стандарту при обработке robots.txt, директиву 'Host' необходимо добавлять в группе, начинающейся с записи 'User-Agent', непосредственно после директив 'Disallow'('Allow'). Аргументом директивы 'Host' является доменное имя с номером порта (80 по умолчанию), отделенным двоеточием.
#Пример корректно составленного robots.txt, при обработке которого директива Host учитывается
User-Agent: *
Disallow:
Host: www.myhost.ru
#Примеры некорректно составленных robots.txt, при обработке которых директива Host может не учитываться
#1.
User-Agent: *
Host: www.myhost.ru
#2.
Host: www.myhost.ru
#3.
User-Agent: *
Host: www.myhost.ru
Disallow:
#4.
Host: www.myhost.ru
User-Agent: *
Disallow:
Важно: параметр директивы Host обязан состоять из одного корректного имени хоста (т.е. соответствующего RFC 952 и не являющегося IP-адресом) и допустимого номера порта. Некорректно составленные строчки 'Host:' игнорируются.
# Примеры игнорируемых директив Host
Host: www.myhost-.ru
Host: www.-myhost.ru
Host: www.myhost.ru:100000
Host: www.my_host.ru
Host: .my-host.ru:8000
Host: my-host.ru.
Host: my..host.ru
Host: www.myhost.ru/
Host: www.myhost.ru:8080/
Host: http://www.myhost.ru
Host: 213.180.194.129
Host: www.firsthost.ru,www.secondhost.ru
Host: www.firsthost.ru www.secondhost.ru
Примеры использования директивы Host:
# domen.myhost.ru является главным зеркалом www.domen.myhost.ru,
# тогда корректное использование директивы Host такое
User-Agent: *
Disallow:
Host: domen.myhost.ru
# domen.myhost.ru является главным зеркалом www.domen.myhost.ru,
# тогда некорректное использование директивы Host такое
User-Agent: *
Disallow:
Host: myhost.ru
Директива Crawl-delay.
Если сервер сильно нагружен и не успевает отрабатывать запросы на закачку, воспользуйтесь директивой "Crawl-delay". Она позволяет задать поисковому роботу минимальный период времени (в секундах) между концом закачки одной страницы и началом закачки следующей. В целях совместимости с роботами, которые не полностью следуют стандарту при обработке robots.txt, директиву "Crawl-delay" необходимо добавлять в группе, начинающейся с записи "User-Agent", непосредственно после директив "Disallow" ("Allow").
Поисковый робот Яндекса поддерживает дробные значения Crawl-Delay, например, 0.5. Это не гарантирует, что поисковый робот будет заходить на ваш сайт каждые полсекунды, но дает роботу больше свободы и позволяет ускорить обход сайта.
Примеры:
User-agent: Yandex
Crawl-delay: 2 # задает таймаут в 2 секунды
User-agent: *
Disallow: /search
Crawl-delay: 4.5 # задает таймаут в 4.5 секунды
Директива Clean-param.
Если адреса страниц вашего сайта содержат динамические параметры которые не влияют на их содержимое (например: идентификаторы сессий, пользователей, рефереров и т.п.), вы можете описать их при помощи директивы 'Clean-param'. Робот Яндекса, используя эту информацию, не будет многократно перезакачивать дублирующуюся информацию. Таким образом, увеличится эффективность обхода вашего сайта, снизится нагрузка на сервер.
Например, на сайте есть страницы:
www.site.ru/some_dir/get_book.pl?ref=site_1&book_id=123
www.site.ru/some_dir/get_book.pl?ref=site_2&book_id=123
www.site.ru/some_dir/get_book.pl?ref=site_3&book_id=123
параметр 'ref=' используется только для того, чтобы отследить с какого ресурса был сделан запрос и не меняет содержимое, по всем трем адресам будет показана одна и та же страница с книгой 'book_id=123'. Тогда, если в robots.txt указать:
Clean-param: ref /some_dir/get_book.pl
вот так:
User-agent: Yandex
Disallow:
Clean-param: ref /some_dir/get_book.pl
робот Яндекса сведет все адреса страницы к одному:
www.site.ru/some_dir/get_book.pl?ref=site_1&book_id=123,
и будет чаще обходить другие страницы вашего сайта, так как нет необходимости обновлять страницы:
www.site.ru/some_dir/get_book.pl?ref=site_2&book_id=123
www.site.ru/some_dir/get_book.pl?ref=site_3&book_id=123
Синтаксис использования директивы:
Clean-param: p0[&p1&p2&..&pn] [path]
В первом поле через '&' перечисляются параметры, которые нужно не учитывать. Во втором поле указывается префикс пути страниц, для которых нужно применить правило.
Примечание:
Префикс может содержать регулярное выражение в формате, аналогичном robots.txt, но с некоторыми ограничениями: можно использовать только символы A-Za-z0-9.-/*_. При этом * трактуется так же, как в robots.txt. В конец префикса всегда неявно дописывается '*', то есть:
Clean-param: s /forum/showthread.php
означает, что будет сбрасываться параметр s у всех url-ов, начинающихся с /forum/showthread.php. Второе поле указывать необязательно, в этом случае параметр(ы) не будет учитываться для всех адресов страниц сайта. Регистр учитывается. Действует ограничение на длину правила - 500 символов. Например:
Clean-param: abc /forum/showthread.php
Clean-param: sid&sort /forumt/*.php
Clean-param: someTrash&otherTrash
Дополнительные примеры:
#для адресов вида:
www.site1.ru/forum/showthread.php?s=681498b9648949605&t=8243
www.site1.ru/forum/showthread.php?s=1e71c4427317a117a&t=8243
#robots.txt будет содержать:
User-agent: Yandex
Disallow:
Clean-param: s /forum/showthread.php
#для адресов вида:
www.site2.ru/index.php?page=1&sort=3a&sid=2564126ebdec3150c2d5d3e1c607e5df
www.site2.ru/index.php?page=1&sort=3a&sid=974017dcd170d6f0640bd2ec4a5d76ae
#robots.txt будет содержать:
User-agent: Yandex
Disallow:
Clean-param: sid /index.php
#если таких параметров несколько:
www.site1.ru/forum_old/showthread.php?s=681498b9648949605&t=8243&ref=131951
www.site1.ru/forum_new/showthread.php?s=1e71c4427317a117a&t=8243&ref=989612
#robots.txt будет содержать:
User-agent: Yandex
Disallow:
Clean-param: s&ref /forum*/showthread.php
#если параметр используется в нескольких скриптах:
www.site1.ru/forum/showthread.php?s=681498b9648949605&t=8243
www.site1.ru/forum/index.php?s=1e71c4427317a117a&t=8243
#robots.txt будет содержать:
User-agent: Yandex
Disallow:
Clean-param: s /forum/index.php
Clean-param: s /forum/showthread.php
Дополнительная информация.
Директивы robots.txt, которые не упомянуты в данном описании, робот Яндекса не поддерживает.
Необходимо помнить, что результат использования расширений формата robots.txt может отличаться от результата без них, а именно:
User-agent: Yandex
Allow: /
Disallow: /
# без расширений все запрещалось так как 'Allow: /' игнорировалось,
# с поддержкой расширений все разрешается
User-agent: Yandex
Disallow: /private*html
# без расширений запрещалось '/private*html',
# а с поддержкой расширений и '/private*html',
# и '/private/test.html', и '/private/html/test.aspx' и т.п.
User-agent: Yandex
Disallow: /private$
# без расширений запрещалось '/private$' и '/private$test' и т.п.,
# а с поддержкой расширений только '/private'
User-agent: *
Disallow: /
User-agent: Yandex
Allow: /
# без расширений из-за отсутствия перевода строки,
# 'User-agent: Yandex' было бы проигнорировано и
# результатом стало бы 'Disallow: /', но робот Яндекса
# выделяет записи по наличию в строке 'User-agent:',
# результат для робота Яндекса в данном случае 'Allow: /'
User-agent: *
Disallow: /
# комментарий1...
# комментарий2...
# комментарий3...
User-agent: Yandex
Allow: /
# аналогично предыдущему примеру (см. выше)
Примеры использования расширенного формата robots.txt:
User-agent: Yandex
Allow: /archive
Disallow: /
# разрешает все, что содержит '/archive', остальное запрещено
User-agent: Yandex
Allow: /obsolete/private/*.html$ # разрешает html файлы по пути '/obsolete/private/...'
Disallow: /*.php$ # запрещает все '*.php' на данном сайте
Disallow: /*/private/ # запрещает все подпути содержащие '/private/', но Allow выше отменяет часть запрета
Disallow: /*/old/*.zip$ # запрещает все '*.zip' файлы, содержащие в пути '/old/'
User-agent: Yandex
Disallow: /add.php?*user=
# запрещает все скрипты 'add.php?' с параметром 'user'
При написании robots.txt необходимо помнить, что у робота есть разумное ограничение на его размер. Слишком большие robots.txt (более 256 Кб) считаются полностью разрешающими, то есть рассматриваются аналогично:
User-agent: Yandex
Disallow:
Также разрешающими считаются robots.txt, которые не удалось закачать (например, по причине неправильных http-заголовков) или отдающие 404 ошибку.
Для проверки правильности файла robots.txt вы можете воспользоваться специальным on-line анализатором. См. описание «Анализатор robots.txt»