Pengungkapan: kami adalah Geonode dan kami menjual layanan proxy, yang merupakan salah satu komponen dalam metode crawling yang dijelaskan di bagian akhir. Urutan yang tepat adalah bahwa crawling seharusnya menjadi hal terakhir yang Anda coba, bukan yang pertama. Lima dari delapan sumber di bawah ini gratis, tidak memerlukan infrastruktur, dan sering kali menghasilkan daftar yang lebih lengkap daripada hasil crawling — karena mencakup halaman-halaman yang tidak lagi ditautkan dari mana pun. Jika Anda memulai dengan membuat crawler, Anda akan bekerja lebih keras namun cakupannya justru lebih sedikit. Belilah bandwidth setelah Anda memastikan bahwa sumber-sumber gratis tersebut memiliki celah yang perlu Anda isi, yang biasanya terjadi lebih lambat daripada yang diperkirakan kebanyakan orang.
Mengapa "Semua Halaman" Tidak Memiliki Jawaban yang Lengkap
Empat alasan, semuanya bersifat struktural.
Halaman terlantar memang ada. Sebuah halaman tanpa tautan masuk tidak dapat dijangkau melalui proses crawling dan tidak terlihat oleh mesin pencari, tetapi halaman tersebut tetap ada dan mungkin masih aktif. Halaman arahan lama, URL kampanye, dan bagian yang sudah tidak digunakan lagi semuanya termasuk dalam kategori ini.
Konten di balik formulir dan otentikasi tidak dapat dihitung. Hasil pencarian, tampilan yang difilter, dan apa pun yang memerlukan login tidak dapat diakses melalui proses penemuan.
URL dinamis bisa tak terbatas. Kalender dengan tautan ke bulan berikutnya menghasilkan URL yang tak terbatas. Navigasi berfacet di situs e-commerce menghasilkan ledakan kombinatorial. "Semua halaman" bukanlah himpunan yang terbatas di beberapa situs.
Situs web seringkali “berbohong” melalui kelalaian. Peta situs hanya berisi apa yang dipilih pemiliknya untuk dicantumkan, yang seringkali merupakan halaman yang ingin mereka indeks, bukan halaman yang sebenarnya ada.
Jadi, tujuan yang realistis bukanlah kelengkapan, melainkan cakupan yang memadai untuk tujuan Anda, yang berarti sumber yang Anda pilih bergantung pada alasan Anda melakukan pencarian tersebut.
Mulailah dengan Peta Situs
Langkah awal yang paling efektif, namun sering diabaikan orang.
Protokol peta situs mendefinisikan format XML yang mencantumkan URL-URL suatu situs. Sebuah peta situs "harus dimulai dengan tag pembuka <urlset> dan diakhiri dengan tag penutup </urlset>", dengan setiap entri memerlukan elemen <loc>. Elemen-elemen opsional seperti <lastmod>, <changefreq>, dan <priority> dapat menyertainya, meskipun protokol tersebut mencatat bahwa perlakuan terhadap elemen-elemen tersebut "dapat bervariasi di antara mesin pencari".
Batasan ini memengaruhi hasil pencarian Anda: satu berkas peta situs dibatasi hingga "50.000 URL dan ukurannya tidak boleh melebihi 50MB (52.428.800 byte)". Situs yang lebih besar menggunakan indeks peta situs — sebuah <sitemapindex> yang mencantumkan peta situs lainnya — yang tunduk pada batasan yang sama, sehingga sebuah situs mungkin memiliki puluhan berkas peta situs.
Tempat untuk mencari:
https://example.com/sitemap.xml
https://example.com/sitemap_index.xml
https://example.com/sitemap.xml.gz
Kompresi Gzip diperbolehkan, "tetapi berkas yang telah didekompresi tetap harus mematuhi batasan ukuran".
Dan periksa robots.txt terlebih dahulu, karena protokol tersebut memungkinkan pengumuman peta situs di sana dengan direktif Sitemap::
curl -s https://example.com/robots.txt | grep -i sitemap
Ini adalah tiga puluh detik yang paling berharga yang tersedia. Banyak situs mencantumkan beberapa peta situs yang namanya mungkin tidak pernah Anda duga — peta situs terpisah untuk produk, kategori, postingan blog, dan gambar.
Ikuti indeks secara rekursif. Indeks peta situs mengarah ke peta situs lain yang mungkin mengarah ke peta situs lainnya. Ambil masing-masing, ekstrak nilai-nilai <loc>, dan perhatikan bahwa entri dalam indeks adalah berkas peta situs, sedangkan entri dalam urlset adalah halaman.
Kolom "<lastmod>" adalah alasan lain untuk memulai dari sini: kolom ini memberi tahu Anda apa yang telah berubah, sehingga proses perayapan ulang hanya perlu mengambil beberapa halaman yang telah dipindahkan.
Membaca robots.txt untuk Mengetahui Apa yang Terungkap
Selain direktif sitemap, robots.txt merupakan daftar jalur yang dianggap layak disebutkan oleh pemilik situs.
Disallow: /admin/
Disallow: /internal/reports/
Disallow: /checkout/
Disallow: /search?
Setiap baris Disallow menyebutkan jalur yang benar-benar ada. Ini bukan jalan masuk — melainkan pernyataan tentang apa yang tidak boleh Anda jelajahi, dan mematuhinya adalah hal yang benar serta menjadi pembeda antara crawler yang diakui dan crawler yang mengganggu. Namun, file ini memberi tahu Anda struktur situs, dan sering kali menyebutkan bagian-bagian yang sebelumnya tidak Anda ketahui.
Bacalah daftar ini sebagai peta, bukan sebagai daftar target. Jalur yang dilarang harus tetap di luar daftar perayapan Anda; mengetahui bahwa jalur tersebut ada tetap memberikan wawasan tentang situs tersebut.
Operator Mesin Pencari
Cepat, gratis, dan parsial.
site:example.com
site:example.com inurl:/products/
site:example.com -inurl:/blog/
site:example.com filetype:pdf
Manfaatnya: halaman-halaman yang telah diindeks oleh mesin pencari, yang merupakan bagian dari keseluruhan halaman yang ada. Hasilnya juga dibatasi dan bersifat perkiraan, bukan hasil yang lengkap.
Kegunaan yang sesungguhnya: menemukan subdomain dan bagian yang belum Anda ketahui, serta menemukan berkas dokumen yang tidak ditautkan dari menu navigasi. Pencarian dengan kata kunci “filetype:pdf” di situs perusahaan sering kali mengungkap materi yang tidak diharapkan publik.
Keterbatasannya adalah bahwa mengekstrak hasil pencarian secara langsung melanggar ketentuan sebagian besar mesin pencari, dan versi manualnya lambat. Jika Anda membutuhkannya secara terprogram, gunakan API pencarian resmi jika tersedia, daripada mengotomatiskan antarmuka web.
Arsip Web
Sumber yang sering dilupakan kebanyakan orang, dan satu-satunya yang dapat menemukan halaman-halaman yang sudah tidak ada lagi.
API Server CDX dari Internet Archive melakukan pencarian langsung ke indeks penangkapan arsip tersebut. Dokumentasi tersebut menyebutkan bahwa "kueri paling sederhana dan satu-satunya parameter yang wajib untuk server CDX adalah parameter url".
curl -s "http://web.archive.org/cdx/search/cdx?url=example.com/*&output=json&fl=original&collapse=urlkey&limit=10000"
Parameter-parameter yang perlu diketahui:
**matchType
** mengontrol cakupan — exact
cocok dengan satu URL, prefix
mengembalikan semua yang ada di bawah suatu jalur, host
mencakup satu nama host, dan domain
mencakup sebuah domain beserta semua subdomainnya. Karakter wildcard dalam URL secara implisit mengatur hal ini, sehingga example.com/*
merupakan pencocokan awalan.
**collapse=urlkey
** menghapus duplikat yang berdekatan, yang sangat penting karena arsip menyimpan banyak tangkapan dari URL yang sama.
**output=json
** lebih praktis daripada format teks CDX default, dan gzip=false
menonaktifkan pengkodean gzip default jika klien Anda tidak dapat mengelolanya.
Batasan: API ini "menerapkan batas maksimum default sebesar 150.000 hasil per kueri", yang dapat disesuaikan dengan limit=N
, dan untuk kueri yang lebih besar, dokumentasi merekomendasikan penggunaan API paginasi melalui page
dan pageSize
.
Mengapa hal ini sangat berharga: API ini menampilkan URL historis. Halaman yang telah dihapus, bagian yang telah direstrukturisasi, halaman arahan kampanye yang tautannya telah diputus. Untuk memahami seperti apa situs tersebut sebelumnya, atau untuk menemukan konten terlantar yang masih aktif, tidak ada yang bisa menandingi API ini — dan API ini sama sekali tidak membebani target.
Common Crawl
Korpus hasil perayapan publik berskala besar yang dilengkapi indeks yang dapat Anda telusuri, sekaligus merupakan sumber daya yang benar-benar belum dimanfaatkan secara optimal.
Common Crawl menerbitkan hasil perayapan berkala dari sebagian besar web, beserta indeks URL. Dengan menelusuri indeks tersebut, Anda akan mendapatkan URL-URL yang terdeteksi oleh perayapan untuk suatu domain, secara massal, tanpa perlu mengakses situs tersebut.
Komprominya cukup jelas. Cakupannya luas namun tidak lengkap — ini adalah hasil perayapan, yang memiliki titik-titik buta seperti halnya perayapan lainnya. Keterbaruan bergantung pada perayapan mana yang Anda cari. Dan melakukan pencarian pada indeks dalam skala besar merupakan proses pemrosesan data, bukan sekadar permintaan tunggal.
Keunggulannya terletak pada: penelitian berskala besar, perbandingan banyak domain, dan situasi apa pun di mana Anda ingin melihat gambaran suatu situs tanpa menghasilkan lalu lintas ke situs tersebut.
Crawling: Pilihan Terakhir, Dilakukan dengan Benar
Ketika sumber gratis meninggalkan celah, lakukan crawling. Lakukan dengan cara yang tidak menimbulkan masalah.
Alur dasar: ambil halaman, ekstrak tautan, saring ke domain target, masukkan yang baru ke antrean, ulangi hingga antrean kosong. Sederhana secara prinsip, namun penuh dengan detail.
Detail yang penting:
Patuhi aturan "robots.txt". Ini sudah menjadi standar — RFC 9309 mendefinisikan pencocokan berdasarkan spesifisitas, bukan urutan; mewajibkan pembaruan berkas setidaknya setiap hari; dan menganggap kesalahan server sebagai larangan total. Gunakan pustaka yang terawat daripada menulis parser sendiri.
Normalisasi URL secara agresif. Tanda garis miring di akhir, urutan parameter kueri, huruf besar-kecil pada nama host, pengenal sesi, dan parameter pelacakan semuanya menghasilkan duplikat. Crawler tanpa normalisasi akan mengunjungi halaman yang sama ratusan kali.
Batasi perayapan. Batasan kedalaman, batasan jumlah halaman, dan pengecualian pola untuk kalender serta navigasi berfacet. Tanpa batasan tersebut, beberapa situs dapat menjadi tak terbatas.
Batasi laju permintaan Anda sendiri. Satu permintaan setiap satu atau dua detik dianggap sopan dan memadai untuk sebagian besar tugas. Crawl-delay di robots.txt adalah permintaan yang layak dihormati.
Identifikasi diri Anda. User agent dengan nama dan URL kontak jauh lebih kecil kemungkinannya diblokir dibandingkan otomatisasi anonim.
Simpan dalam cache dan gunakan permintaan bersyarat. If-Modified-Since dan If-None-Match mengubah proses perayapan ulang menjadi serangkaian respons 304 yang efisien.
Kapan proxy diperlukan: pada skala yang sesungguhnya, ketika satu alamat terkena pembatasan laju, atau ketika konten berbeda berdasarkan wilayah. Bukan sebelum itu. Bandwidth pusat data adalah pilihan default yang masuk akal untuk hal ini — tarif kami mulai dari $0,14/GB, diperiksa pada September 2026 — dan bandwidth perumahan hanya layak ditingkatkan jika pusat data terbukti gagal.
Sumber Lain yang Perlu Diketahui
Empat sumber yang lebih kecil yang mengisi celah-celah tertentu.
Log transparansi sertifikat. Setiap sertifikat TLS yang diterbitkan dicatat secara publik, dan sertifikat tersebut mencantumkan nama hostnya. Dengan menanyakan agregator log CT untuk suatu domain, subdomain akan terungkap — termasuk subdomain yang terdengar seperti internal yang tidak pernah dimaksudkan untuk ditemukan melalui cara lain. Ini adalah metode penemuan subdomain terbaik dan tidak melibatkan kontak dengan target.
Umpan RSS dan Atom. Masih banyak dipublikasikan, dan umpan ini mencantumkan konten dalam bentuk terstruktur beserta tanggalnya. Periksa /feed, /rss, /atom.xml, serta tag <link rel="alternate"> di bagian header halaman.
Fitur pencarian dan navigasi situs itu sendiri. Indeks A-Z, daftar tag, halaman kategori, atau halaman peta situs HTML — banyak situs menerbitkan salah satunya untuk pengunjung manusia, dan seringkali lebih lengkap daripada peta situs XML.
API di balik antarmuka pengguna. Jika situs tersebut merupakan aplikasi satu halaman, situs tersebut memanggil API untuk mendapatkan kontennya, dan API tersebut sering kali menyediakan titik akhir daftar yang mengembalikan semua data dalam bentuk terstruktur. Periksa tab jaringan di browser Anda. Ini secara konsisten merupakan rute tercepat di situs-situs modern dan secara konsisten merupakan yang terakhir ditemukan oleh orang-orang.
Menggabungkan Sumber
Metode praktis untuk penghitungan yang teliti, dan alasan mengapa urutan sangat penting.
Kumpulkan secara terpisah, lalu gabungkan. Gabungkan URL peta situs, URL arsip, URL feed, dan hasil perayapan menjadi satu kumpulan. Lakukan normalisasi sebelum penggabungan, atau Anda akan menghitung halaman yang sama beberapa kali.
Verifikasi keaktifan. URL arsip mungkin menampilkan kode 404 hari ini. Permintaan HEAD
per URL tidak memakan biaya:
while read -r url; do
code=$(curl -sIL -o /dev/null --max-time 10 -w '%{response_code}' "$url")
echo "$code $url"
done < urls.txt
Bandingkan sumber-sumber tersebut satu sama lain. URL yang ada di arsip tetapi tidak ada di peta situs adalah halaman yang dihapus atau terputus. URL yang ada di peta situs tetapi mengembalikan kode 404 adalah entri yang sudah usang. URL yang ditemukan melalui perayapan tetapi tidak ada di peta situs adalah halaman yang tidak ingin diindeks oleh pemiliknya. Setiap perbedaan merupakan informasi.
Lacak seiring waktu. Menjalankan proses ini secara berkala dan membandingkan perbedaannya akan memberi tahu Anda apa yang ditambahkan dan dihapus, yang seringkali merupakan pertanyaan sebenarnya di balik "temukan semua halaman".
Panduan Praktis
Menggabungkan sumber-sumber tersebut dalam satu domain, dengan urutan yang paling efisien.
Pertama — temukan peta situs yang telah dideklarasikan:
DOMAIN="example.com"
curl -s "https://$DOMAIN/robots.txt" | grep -i '^sitemap:' | awk '{print $2}' > sitemaps.txt
# fall back to the conventional locations if nothing is declared
[ -s sitemaps.txt ] || printf 'https://%s/sitemap.xml\nhttps://%s/sitemap_index.xml\n' "$DOMAIN" "$DOMAIN" > sitemaps.txt
Kedua — perluas indeks dan kumpulkan URL. Indeks peta situs berisi nilai-nilai <loc>
yang mengarah ke peta situs lain, sedangkan urlset berisi nilai-nilai <loc>
yang mengarah ke halaman, sehingga proses ekstraksi yang sama berlaku di kedua tingkat tersebut dan Anda cukup mengulanginya:
extract() { curl -s --compressed "$1" | grep -o '<loc>[^<]*</loc>' | sed 's/<[^>]*>//g'; }
: > all_urls.txt
while read -r sm; do
extract "$sm" | while read -r u; do
case "$u" in
*.xml|*.xml.gz) extract "$u" >> all_urls.txt ;;
*) echo "$u" >> all_urls.txt ;;
esac
done
done < sitemaps.txt
sort -u all_urls.txt -o all_urls.txt
wc -l all_urls.txt
Tiga — tambahkan tampilan arsip:
curl -s "http://web.archive.org/cdx/search/cdx?url=${DOMAIN}/*&output=text&fl=original&collapse=urlkey&limit=50000" \
| sort -u > archive_urls.txt
wc -l archive_urls.txt
Empat — bandingkan, bukan sekadar gabungkan. Di sinilah hasil yang menarik muncul:
comm -13 all_urls.txt archive_urls.txt > only_in_archive.txt # orphaned or removed
comm -23 all_urls.txt archive_urls.txt > only_in_sitemap.txt # new or never archived
only_in_archive.txt
adalah daftar yang layak dilihat terlebih dahulu. Itu adalah URL yang pernah disajikan situs tersebut namun tidak lagi diiklankan — beberapa akan menghasilkan 404, dan yang tidak akan menghasilkan 404 adalah halaman aktif yang tidak ditautkan oleh siapa pun.
Lima — periksa keaktifan sebelum mempercayai apa pun. Kedua daftar tersebut berisi entri yang sudah usang, dan permintaan ``HEAD`
` per URL hanya memakan beberapa ratus byte, bukan satu halaman penuh:
while read -r u; do
printf '%s %s\n' "$(curl -sIL -o /dev/null --max-time 10 -w '%{response_code}' "$u")" "$u"
done < only_in_archive.txt | tee liveness.txt
grep '^200 ' liveness.txt | wc -l
Perhatikan urutan yang disengaja: empat sumber yang dirujuk, ribuan URL yang dikumpulkan, dan tidak ada satu pun skrip crawling yang ditulis. Pada sebagian besar situs, hal ini menghasilkan gambaran yang lebih lengkap daripada yang dihasilkan oleh crawler, dalam waktu yang jauh lebih singkat, dan target hampir tidak menyadari bahwa Anda pernah berkunjung ke sana.
Pertanyaan Terkait
Bagaimana cara menemukan semua halaman di sebuah situs web?
Mulailah dengan robots.txt untuk menemukan deklarasi peta situs, lalu ambil peta situs tersebut dan ikuti semua berkas indeks. Gunakan juga API CDX dari Internet Archive untuk URL historis, umpan RSS, dan pencarian di site:. Lakukan perayapan hanya untuk hal-hal yang terlewatkan oleh sumber-sumber tersebut — ini adalah opsi yang paling lambat dan paling mengganggu.
Di mana letak peta situs suatu situs web?
Biasanya /sitemap.xml atau /sitemap_index.xml, dan cara yang paling andal untuk menemukannya adalah melalui direktif Sitemap: di robots.txt. Situs besar menggunakan peta situs indeks yang mengarah ke beberapa berkas, karena masing-masing berkas dibatasi hingga 50.000 URL dan 50MB.
Bisakah saya menemukan halaman yang tidak ditautkan di mana pun?
Terkadang. Secara definisi, proses crawling tidak dapat menemukannya, tetapi arsip web sering kali bisa — API CDX dari Internet Archive mengembalikan URL historis termasuk yang tidak lagi ditautkan. Log transparansi sertifikat juga mengungkapkan subdomain yang tidak ditautkan dari mana pun.
Bagaimana cara menemukan semua subdomain dari sebuah situs web?
Log transparansi sertifikat adalah sumber terbaik, karena setiap sertifikat TLS yang diterbitkan dicatat secara publik beserta nama hostnya. Operator mesin pencari dan alat enumerasi DNS melengkapinya. Tidak ada satupun dari ini yang memerlukan kontak dengan situs target.
Apakah sah secara hukum melakukan crawling terhadap sebuah situs web untuk membuat daftar halamannya?
Tergantung pada yurisdiksi, ketentuan situs, dan apa yang Anda lakukan dengan hasilnya. Mematuhi kebijakan "robots.txt", mengidentifikasi crawler Anda, dan menjaga laju pengindeksan tetap wajar akan membuat Anda tetap berada dalam praktik yang lazim. Ketentuan layanan mungkin melarang akses otomatis terlepas dari hal tersebut, dan itu merupakan masalah kontrak yang perlu diperiksa.
Berapa banyak URL yang dapat dimuat dalam sebuah sitemap?
50.000 per berkas, dengan batas ukuran 50 MB (tanpa kompresi). Jika melebihi batas tersebut, situs menggunakan peta situs indeks yang mencantumkan beberapa berkas peta situs — dan indeks itu sendiri tunduk pada batas yang sama, yaitu 50.000 dan 50 MB.
Apa itu API Wayback CDX?
Sebuah antarmuka ke indeks penangkapan Internet Archive yang mengembalikan URL yang telah diarsipkan untuk suatu domain. matchType mengontrol cakupan mulai dari satu URL hingga satu domain dan semua subdomain, collapse=urlkey menghapus penangkapan duplikat, dan batas hasil default adalah 150.000 dengan API paginasi untuk kueri yang lebih besar.
Apakah saya memerlukan proxy untuk menginventarisasi halaman-halaman sebuah situs web?
Tidak untuk pendekatan peta situs, arsip, umpan, atau pencarian — tidak ada satupun yang menghasilkan beban yang signifikan. Anda membutuhkannya untuk perayapan besar-besaran di mana satu alamat terkena pembatasan laju, atau di mana konten berbeda berdasarkan wilayah. Pastikan bahwa sumber gratis memiliki celah sebelum membeli apa pun.
Kesimpulan
Tidak ada daftar lengkap halaman-halaman sebuah situs web; yang ada hanyalah gabungan dari tampilan-tampilan parsial — dan praktik yang berguna adalah mengumpulkan tampilan-tampilan yang mudah dibuat terlebih dahulu sebelum membangun yang lebih rumit.
Tiga puluh detik di robots.txt sudah cukup untuk menemukan deklarasi peta situs. Beberapa menit menelusuri indeks peta situs akan memberi Anda gambaran tentang apa yang dianggap pemilik sebagai situs mereka. API CDX dari Internet Archive menambahkan halaman-halaman yang pernah ada dan halaman-halaman yang tidak lagi ditautkan oleh siapa pun. Umpan, log transparansi sertifikat, dan indeks HTML situs itu sendiri masing-masing mengisi celah yang berbeda. Semua itu gratis dan tidak membebani situs target.
Lakukan perayapan terhadap apa yang tersisa, dengan menghormati aturan robots.txt, URL dinormalisasi, perayapan dibatasi, dan laju perayapan dijaga tetap moderat — serta periksa terlebih dahulu apakah situs tersebut merupakan aplikasi satu halaman yang memanggil API, karena rute tersebut biasanya lebih cepat daripada perayapan dan hampir selalu terlewatkan.
Kemudian bandingkan sumber-sumber tersebut daripada sekadar menggabungkannya. Halaman-halaman yang ada di arsip tetapi tidak tercantum dalam peta situs, serta entri peta situs yang kini mengembalikan kode 404, seringkali merupakan hal paling menarik yang dihasilkan dari seluruh proses ini.
