Spesifikasi robots.txt

Abstrak

Dokumen ini menjelaskan cara Google menangani file robots.txt yang memungkinkan Anda mengontrol cara crawler situs Google meng-crawl dan mengindeks situs yang dapat diakses secara publik.

Apa yang berubah

Pada 1 Juli 2019, Google mengumumkan bahwa protokol robots.txt sedang disiapkan untuk menjadi standar Internet. Perubahan tersebut tercermin dalam dokumen ini.

Definisi dasar

Definisi
Crawler Crawler merupakan layanan atau agen yang meng-crawl situs. Pada umumnya, crawler secara otomatis dan rekursif mengakses sekumpulan URL yang dikenal dari sebuah host yang menampakkan konten yang dapat diakses menggunakan browser web standar. Saat URL baru ditemukan (melalui berbagai cara, misalnya dari link pada halaman di-crawl yang ada atau dari file Peta situs), URL baru juga akan di-crawl dengan cara yang sama.
Agen-pengguna Sarana untuk mengidentifikasi crawler atau sekumpulan crawler tertentu.
Perintah Daftar pedoman yang dapat diterapkan untuk crawler atau sekelompok crawler yang disetel dalam file robots.txt.
URL Uniform Resource Locators (Lokator Sumber Seragam) seperti yang didefinisikan dalam RFC 1738.
Khusus Google Elemen ini bersifat khusus untuk implementasi robot.txt pada Google dan mungkin tidak relevan bagi pihak lain.

Keberlakuan

Pedoman yang dijelaskan dalam dokumen ini diikuti oleh semua crawler otomatis di Google. Saat agen mengakses URL atas nama pengguna (misalnya untuk penerjemahan, berlangganan feed secara manual, analisis malware), pedoman ini tidak perlu diterapkan.

Lokasi file dan rentang validitas

File robots.txt harus berada di direktori tingkat atas host, yang dapat diakses melalui protokol dan nomor port yang sesuai. Protokol yang diterima secara umum untuk robots.txt semuanya berbasis URI dan, khusus untuk Google Penelusuran (misalnya crawling situs web), adalah "http" dan "https". Di http dan https, file robots.txt diambil menggunakan permintaan GET non-kondisional HTTP.

Khusus Google: Google juga menerima dan mengikuti file robots.txt untuk situs FTP. File robots.txt berbasis FTP diakses melalui protokol FTP, menggunakan login anonim.

Perintah yang tercantum dalam file robots.txt hanya berlaku untuk host, protokol, dan nomor port tempat file dihosting.

Contoh URL robots.txt yang valid:

Contoh URL Robots.txt
http://example.com/robots.txt Valid untuk:
  • http://example.com/
  • http://example.com/folder/file
Tidak valid untuk:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

Valid untuk: http://www.example.com/

Tidak valid untuk:

  • http://example.com/
  • http://shop.www.example.com/
  • http://www.shop.example.com/
http://example.com/folder/robots.txt Bukan file robots.txt yang valid. Crawler tidak memeriksa keberadaan file robots.txt di subdirektori.
http://www.müller.eu/robots.txt Valid untuk:
  • http://www.müller.eu/
  • http://www.xn--mller-kva.eu/

Tidak valid untuk: http://www.muller.eu/

ftp://example.com/robots.txt

Valid untuk: ftp://example.com/

Tidak valid untuk: http://example.com/

Khusus Google: Kami menggunakan robots.txt untuk resource FTP.

http://212.96.82.21/robots.txt

Valid untuk: http://212.96.82.21/

Tidak valid untuk: http://example.com/ (meskipun di-host di 212.96.82.21)

http://example.com:80/robots.txt

Valid untuk:

  • http://example.com:80/
  • http://example.com/

Tidak valid untuk: http://example.com:81/

http://example.com:8181/robots.txt

Valid untuk: http://example.com:8181/

Tidak valid untuk: http://example.com/

Menangani kode hasil HTTP

Umumnya ada tiga hasil yang berbeda saat file robots.txt diambil:

  • sepenuhnya diizinkan: Semua konten dapat di-crawl.
  • sepenuhnya dilarang: Tidak ada konten yang dapat di-crawl.
  • diizinkan sesuai kondisi: Perintah dalam robots.txt menentukan kemampuan untuk meng-crawl konten tertentu.
Menangani kode hasil HTTP
2xx (berhasil) Kode hasil HTTP yang menunjukkan keberhasilan menyebabkan crawling "diizinkan sesuai kondisi".
3xx (pengalihan) Google mengikuti setidaknya lima lompatan pengalihan seperti yang didefinisikan oleh RFC 1945 untuk HTTP/1.0, lalu berhenti dan memperlakukannya sebagai 404. Penanganan pengalihan robots.txt ke URL yang dilarang tidak disarankan. Karena belum ada aturan yang diambil, pengalihan akan diikuti untuk setidaknya lima lompatan dan, jika robots.txt tidak ditemukan, Google akan memperlakukannya sebagai 404 untuk robots.txt tersebut. Penanganan pengalihan logis untuk file robots.txt yang didasarkan pada konten HTML yang menampilkan 2xx (pengalihan jenis bingkai, JavaScript, atau refresh meta) tidak disarankan dan konten halaman pertama akan digunakan untuk menemukan aturan yang berlaku.
4xx (error klien) Semua error 4xx diperlakukan dengan cara yang sama dan diasumsikan bahwa tidak ada file robots.txt yang valid. Diasumsikan tidak ada batasan. Ini adalah "sepenuhnya diizinkan" untuk crawling.
5xx (error server)

Error server dianggap sebagai error sementara yang mengakibatkan crawling "sepenuhnya dilarang". Permintaan ini akan dicoba lagi sampai diperoleh kode hasil HTTP yang bukan error server. Error 503 (Layanan Tidak Tersedia) akan menyebabkan percobaan ulang yang cukup sering. Jika robots.txt tidak dapat dijangkau selama lebih dari 30 hari, salinan yang terakhir di-cache untuk robots.txt akan digunakan. Jika tidak tersedia, Google akan berasumsi bahwa tidak ada batasan crawl. Untuk menangguhkan crawling sementara, sebaiknya berikan kode hasil HTTP 503.

Khusus Google: Jika kami dapat menyimpulkan bahwa sebuah situs salah dikonfigurasi sehingga menampilkan 5xx, bukannya 404 untuk halaman yang tidak ada, kami akan memperlakukan error 5xx dari situs tersebut sebagai 404.

Permintaan gagal atau data tidak lengkap Penanganan file robots.txt yang tidak dapat diambil karena masalah DNS atau jaringan, seperti waktu tunggu, respons tidak valid, koneksi disetel ulang atau terputus, dan error pemotongan HTTP, akan diperlakukan sebagai error server.
Menyimpan ke cache Konten robots.txt pada umumnya di-cache hingga 24 jam, tetapi mungkin juga di-cache lebih lama jika refresh versi yang di-cache tidak dapat dilakukan (misalnya, karena waktu tunggu atau error 5xx). Respons yang di-cache mungkin dibagikan oleh crawler lain. Google dapat menambah atau mengurangi masa aktif cache berdasarkan header HTTP Cache-Control max-age.

Format file

Format file yang diharapkan adalah teks biasa yang dienkode dalam UTF-8. File ini terdiri dari baris-baris yang dipisahkan dengan CR, CR/LF, atau LF.

Hanya baris yang valid yang dipertimbangkan; semua konten lainnya diabaikan. Misalnya, jika dokumen yang dihasilkan adalah halaman HTML, hanya baris teks yang valid yang diperhitungkan, sisanya akan dihapus tanpa peringatan atau error.

Jika encoding karakter digunakan dan menyebabkan penggunaan karakter yang bukan bagian dari UTF-8, konten file dapat diurai dengan cara yang salah.

BOM (tanda urutan byte) Unicode opsional di awal file robots.txt diabaikan.

Setiap baris yang valid terdiri dari sebuah kolom, sebuah titik dua, dan sebuah nilai. Spasi bersifat opsional (tetapi disarankan agar mudah terbaca). Komentar dapat disertakan di lokasi mana pun dalam file menggunakan karakter "#"; semua konten setelah awal komentar hingga akhir baris diperlakukan sebagai komentar dan diabaikan. Format umumnya adalah <field>:<value><#optional-comment>. Spasi putih di awal dan di akhir baris akan diabaikan.

Elemen <field> tidak peka huruf besar/kecil. Elemen <value> mungkin peka huruf besar/kecil, bergantung pada elemen <field>.

Penanganan elemen <field> dengan error atau salah ketik sederhana (misalnya "useragent" bukan "user-agent") tidak didukung.

Ukuran file maksimum mungkin diberlakukan per crawler. Konten yang melampaui ukuran file maksimum akan diabaikan. Saat ini Google memberlakukan batas ukuran sebesar 500 kibibyte (KiB). Untuk mengurangi ukuran file robots.txt, gabungkan perintah yang akan menghasilkan file robots.txt dengan ukuran terlalu besar. Misalnya, tempatkan materi yang dikecualikan di direktori terpisah.

Sintaks formal/definisi

Berikut adalah deskripsi Augmented Backus-Naur Form (ABNF), seperti yang dijelaskan dalam RFC 5234

    robotstxt = *(group / emptyline)
    group = startgroupline                    ; We start with a user-agent
            *(startgroupline / emptyline)     ; ... and possibly more user-agents
            *(rule / emptyline)               ; followed by rules relevant for UAs

    startgroupline = *WS "user-agent" *WS ":" *WS product-token EOL

    rule = *WS ("allow" / "disallow") *WS ":" *WS (path-pattern / empty-pattern) EOL

    ; parser implementors: add additional lines you need (for example, Sitemaps), and
    ; be lenient when reading lines that don’t conform. Apply Postel’s law.

    product-token = identifier / "*"
    path-pattern = "/" *(UTF8-char-noctl)    ; valid URI path pattern; see 3.2.2
    empty-pattern = *WS

    identifier = 1*(%x2d / %x41-5a / %x5f / %x61-7a)
    comment = "#" *(UTF8-char-noctl / WS / "#")
    emptyline = EOL
    EOL = *WS [comment] NL         ; end-of-line may have optional trailing comment
    NL = %x0D / %x0A / %x0D.0A
    WS = %x20 / %x09

    ; UTF8 derived from RFC3629, but excluding control characters
    UTF8-char-noctl = UTF8-1-noctl / UTF8-2 / UTF8-3 / UTF8-4
    UTF8-1-noctl    = %x21 / %x22 / %x24-7F  ; excluding control, space, '#'
    UTF8-2          = %xC2-DF UTF8-tail
    UTF8-3          = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
                      %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
    UTF8-4          = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
                      %xF4 %x80-8F 2( UTF8-tail )
    UTF8-tail       = %x80-BF
    

Pengelompokan baris dan aturan

Satu atau beberapa baris agen-pengguna yang diikuti oleh satu atau beberapa aturan. Grup diakhiri oleh baris agen-pengguna atau akhir file. Grup terakhir mungkin tidak memiliki aturan, yang secara tersirat berarti mengizinkan apa pun.

Grup contoh:

    user-agent: a
    disallow: /c

    user-agent: b
    disallow: /d

    user-agent: e
    user-agent: f
    disallow: /g

    user-agent: h
    

Ada empat grup berbeda yang ditentukan, satu untuk "a" dan satu untuk "b", serta satu untuk "e" dan "f". Kecuali untuk grup terakhir, setiap grup memiliki baris anggota grupnya masing-masing. Grup terakhir kosong. Perhatikan penggunaan spasi putih dan baris kosong (opsional) untuk meningkatkan keterbacaan.

Urutan prioritas untuk agen-pengguna

Hanya satu grup yang valid untuk crawler tertentu. Crawler perlu menentukan grup baris yang tepat dengan menemukan grup dengan agen-pengguna paling spesifik yang masih cocok. Semua grup lain akan diabaikan oleh crawler. Agen-pengguna peka huruf besar/kecil. Semua teks yang tidak cocok akan diabaikan (misalnya googlebot/1.2 dan googlebot* setara dengan googlebot). Urutan grup dalam file robots.txt tidak relevan.

Jika ada lebih dari satu grup untuk agen-pengguna tertentu, semua aturan dari grup yang berlaku untuk agen-pengguna tertentu akan digabungkan.

Contoh

Diasumsikan file robots.txt berikut:

    user-agent: googlebot-news
    (group 1)

    user-agent: *
    (group 2)

    user-agent: googlebot
    (group 3)
    

Berikut cara crawler memilih grup yang relevan:

Grup yang diikuti per crawler
Googlebot Berita Grup yang diikuti adalah grup 1. Hanya grup paling spesifik yang diikuti, semua grup lain akan diabaikan.
Googlebot (web) Grup yang diikuti adalah grup 3.
Googlebot Gambar Grup yang diikuti adalah grup 3. Tidak ada grup googlebot-images yang spesifik, sehingga grup yang lebih generik akan diikuti.
Googlebot-News (saat meng-crawl gambar) > Grup yang diikuti adalah grup 1. Gambar ini di-crawl untuk dan oleh Googlebot-News, oleh karena itu hanya grup Googlebot-News yang diikuti.
Bot lain (web) Grup yang diikuti adalah grup 2.
Bot lain (Berita) Grup yang diikuti adalah grup 2. Meskipun ada entri untuk crawler terkait, entri hanya valid jika benar-benar cocok.

Lihat juga crawler Google dan string agen-pengguna.

Aturan group-member (anggota grup)

Hanya aturan group-member standar yang dicakup dalam bagian ini. Aturan ini disebut juga "perintah" untuk crawler. Perintah ini ditentukan dalam bentuk directive: [path], sedangkan [path] bersifat opsional. Secara default, tidak ada batasan crawling untuk crawler yang ditentukan. Perintah tanpa [path] akan diabaikan.

Nilai [path], jika ditentukan, harus terlihat relatif dari root situs tempat file robots.txt diambil (menggunakan protokol, nomor port, host, dan nama domain yang sama). Nilai path (jalur) harus diawali dengan "/" untuk menentukan root. Jalur peka huruf besar/kecil. Informasi selengkapnya dapat ditemukan di bagian "Pencocokan URL berdasarkan nilai jalur" di bawah.

disallow

Perintah disallow menentukan jalur yang tidak boleh diakses oleh crawler yang ditetapkan. Jika tidak ada jalur yang ditetapkan, perintah akan diabaikan.

Penggunaan:

    disallow: [path]
    

allow

Perintah allow menentukan jalur yang dapat diakses oleh crawler yang ditetapkan. Jika tidak ada jalur yang ditetapkan, perintah akan diabaikan.

Penggunaan:

    allow: [path]
    

Pencocokan URL berdasarkan nilai jalur

Nilai jalur digunakan sebagai dasar dalam menentukan apakah sebuah aturan berlaku untuk URL tertentu di sebuah situs atau tidak. Dengan pengecualian karakter pengganti, jalur digunakan untuk mencocokkan awal URL (dan URL valid apa pun yang diawali dengan jalur yang sama). Karakter yang bukan ASCII 7-bit di dalam jalur dapat disertakan sebagai karakter UTF-8 atau sebagai karakter yang dienkode UTF-8 percent-escaped sesuai RFC 3986.

Google, Bing, dan mesin telusur utama lainnya mendukung bentuk "karakter pengganti" yang terbatas untuk nilai jalur. Karakter pengganti ini meliputi:

  • * menentukan 0 atau lebih instance karakter valid apa pun.
  • $ menentukan akhir URL.
Contoh kecocokan jalur
/ Cocok dengan root dan URL level lebih rendah
/* Setara dengan /. Karakter pengganti di akhir diabaikan.
/fish

Cocok dengan:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Tidak cocok dengan:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish*

Setara dengan /fish. Karakter pengganti di akhir diabaikan.

Cocok dengan:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Tidak cocok dengan:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish/

Garis miring di akhir menunjukkan bahwa ini cocok dengan semua isi folder.

Cocok dengan:

  • /fish/
  • /fish/?id=anything
  • /fish/salmon.htm

Tidak cocok dengan:

  • /fish
  • /fish.html
  • /Fish/Salmon.asp
/*.php

Cocok dengan:

  • /filename.php
  • /folder/filename.php
  • /folder/filename.php?parameters
  • /folder/any.php.file.html
  • /filename.php/

Tidak cocok dengan:

  • / (meskipun dipetakan ke /index.php)
  • /windows.PHP
/*.php$

Cocok dengan:

  • /filename.php
  • /folder/filename.php

Tidak cocok dengan:

  • /filename.php?parameters
  • /filename.php/
  • /filename.php5
  • /windows.PHP
/fish*.php

Cocok dengan:

  • /fish.php
  • /fishheads/catfish.php?parameters

Tidak cocok dengan: /Fish.PHP

Baris non-group-member yang didukung Google

Google, Bing, dan mesin telusur utama lainnya mendukung sitemap, seperti yang didefinisikan oleh sitemaps.org.

Penggunaan:

    sitemap: [absoluteURL]
    

[absoluteURL] mengarah ke Peta Situs, file Indeks Peta Situs, atau URL yang setara. URL tidak harus berada di host yang sama dengan file robots.txt. Beberapa entri sitemap mungkin muncul. Sebagai non-group-member, baris ini tidak terikat dengan agen-pengguna mana pun dan dapat diikuti oleh semua crawler, selama diizinkan.

Urutan prioritas untuk baris group-member

Di tingkat group-member, khususnya untuk perintah allow dan disallow, aturan paling spesifik yang didasarkan pada panjang entri [path] mengalahkan aturan yang kurang spesifik (lebih pendek). Jika terdapat aturan yang bertentangan, termasuk aturan yang menggunakan karakter pengganti, aturan yang paling longgar akan digunakan.

Contoh situasi
http://example.com/page

allow: /p

disallow: /

Putusan: allow

http://example.com/folder/page

allow: /folder

disallow: /folder

Putusan: allow

http://example.com/page.htm

allow: /page

disallow: /*.htm

Putusan: undefined

http://example.com/

allow: /$

disallow: /

Putusan: allow

http://example.com/page.htm

allow: /$

disallow: /

Putusan: disallow