Buat ulang sitemap dari kumpulan halaman publik yang sudah selesai setiap kali Anda menerbitkan, lalu unggah keduanya bersama-sama. Alur kerja Mac ini menggunakan skrip Python kecil untuk menyertakan halaman yang ditambahkan dan otomatis menghapus halaman yang dihapus, dengan pemeriksaan hasil publik.
Tugas di sini adalah memelihara sitemap untuk situs web statis kecil yang diekspor dari Mac. Contohnya menggunakan halaman sintetis tentang warna. Contoh ini mengasumsikan proses penerbitan Anda yang sudah ada dapat mengunggah folder ekspor dan menghapus berkas usang dari situs publik.
Tentukan di mana pembuatan ulang sitemap dilakukan
Pertama, periksa apakah sistem penerbitan Anda sudah membuat sitemap. Google menyebutkan bahwa banyak sistem pengelolaan konten menyediakannya secara otomatis. Jika sistem Anda memilikinya, periksa sitemap tersebut setelah menambahkan dan menghapus halaman uji sebelum menggunakan generator lain. Pelajari tentang sitemap.
Untuk ekspor statis, gunakan urutan berikut: selesaikan ekspor halaman, buat sitemap dari hasil ekspor tersebut, lalu terbitkan folder yang dihasilkan. Ini adalah pola implementasi yang disarankan: sitemap akan menjelaskan kumpulan halaman yang sama dengan yang diterima oleh penerbit.
Pembuatan sitemap saat penerbitan juga memberi aturan yang konsisten untuk penambahan dan penghapusan. Halaman yang ada dalam ekspor yang sudah selesai akan disertakan; halaman yang tidak ada di dalamnya akan dikecualikan. Tidak ada daftar terpisah yang harus Anda ingat untuk diperbarui.
Pilih integrasi yang sesuai dengan penyiapan Anda saat ini:
| Penyiapan penerbitan saat ini | Lokasi pembuatan ulang |
|---|---|
| CMS sudah memelihara sitemap | Tetap gunakan generator tersebut dan uji responsnya terhadap perubahan halaman |
| Ekspor statis mendukung perintah setelah ekspor | Jalankan generator di sana, sebelum mengunggah |
| Perintah yang ada menerbitkan folder yang sudah selesai | Jalankan perintah itu melalui argumen penerbitan opsional pada generator |
| Anda mengunggah melalui antarmuka desktop | Buat sitemap terlebih dahulu, lalu unggah seluruh folder; pembaruan publik tanpa pengawasan memerlukan integrasi penerbitan yang didukung |
Skrip lokal tidak dapat mengubah situs web jarak jauh dengan sendirinya. Alur kerja di bawah ini mengotomatiskan pembuatan sitemap dan dapat menjalankan perintah penerbitan yang sudah ada. Pengunggahan sebenarnya tetap menjadi tanggung jawab sistem penerbitan yang telah Anda gunakan.
Tentukan dengan tepat halaman mana yang termasuk dalam sitemap
Untuk URL halaman biasa, Google menerima sitemap teks yang berisi satu URL lengkap per baris. Format XML tidak wajib untuk tugas ini. Sertakan URL publik yang diutamakan untuk setiap halaman, bukan beberapa versi URL dari konten yang sama. Buat dan kirim sitemap.
Format teks memerlukan pengodean UTF-8 dan hanya berisi URL, tanpa judul atau komentar. Satu berkas dapat memuat paling banyak 50.000 URL dan 52.428.800 byte. Letakkan sitemap contoh ini di akar situs agar mencakup halaman hasil ekspor di bawah lokasi tersebut. Protokol Sitemaps: berkas teks dan lokasi.
Generator ini menggunakan konvensi ekspor yang sengaja dibuat sederhana:
| Berkas hasil ekspor | URL publik ilustratif |
|---|---|
public/index.html |
https://example.com/ |
public/colors/blue.html |
https://example.com/colors/blue.html |
public/tiles/index.html |
https://example.com/tiles/ |
Gunakan konvensi ini hanya jika host Anda menyajikan URL persis seperti itu. Jika sistem penerbitan Anda mengubah blue.html menjadi /colors/blue/, atau menyajikan situs di bawah jalur seperti /collection/, gunakan daftar rute atau sesuaikan pemetaan sebelum menerbitkan. Pemindaian nama berkas tidak dapat menyimpulkan perutean khusus.
Sertakan hanya halaman yang memang dimaksudkan untuk dimasukkan ke folder ekspor. Contoh ini melewati jalur yang diawali titik dan berkas bernama 404.html; contoh ini tidak memeriksa metadata halaman, deklarasi kanonis, atau aturan pengalihan. Situs dengan ketentuan tambahan tersebut sebaiknya membuat sitemap dari inventaris halaman yang memenuhi syarat milik sistem penerbitnya.
Tetap pelihara tautan navigasi biasa. WHATWG mendefinisikan hyperlink yang dibuat oleh elemen a dengan atribut href, dan Google menjelaskan bahwa halaman yang ditautkan dengan benar biasanya dapat ditemukan melalui navigasi. Pembaruan sitemap sebaiknya disertai pembaruan tautan yang mengarah ke halaman yang ditambahkan atau dihapus. Standar HTML WHATWG: tautan, Pelajari tentang sitemap.
Buat generator di Mac Anda
Anda memerlukan Python 3.8 atau versi lebih baru dan editor teks biasa. Di Terminal, jalankan python3 --version untuk memeriksa interpreter yang tersedia. Jika Anda memerlukan Python, ikuti petunjuk instalasi macOS dari Python Software Foundation. Dokumentasinya juga menjelaskan cara menjalankan skrip dengan python3 dari Terminal. Menggunakan Python di macOS.
Buat folder bernama sitemap-demo di Desktop Anda. Simpan program lengkap berikut di dalamnya dengan nama regenerate_sitemap.py. Program ini menggunakan pustaka standar Python dan tidak memerlukan paket tambahan.
import argparse
from pathlib import Path, PurePosixPath
import subprocess
import tempfile
from urllib.parse import quote, urlsplit
def make_sitemap(paths, origin):
parsed = urlsplit(origin)
if (parsed.scheme not in ("http", "https") or not parsed.hostname
or parsed.netloc != parsed.hostname
or parsed.path not in ("", "/")
or parsed.query or parsed.fragment):
raise ValueError("Use a site origin, such as https://example.com")
base = origin.rstrip("/")
urls = set()
for relative in paths:
path = PurePosixPath(relative)
if path.name == "index.html":
parent = path.parent.as_posix()
route = "" if parent == "." else parent + "/"
else:
route = path.as_posix()
urls.add(base + "/" + quote(route, safe="/"))
if not urls:
raise ValueError("No eligible pages; sitemap was not replaced")
if len(urls) > 50000:
raise ValueError("Split the sitemap: more than 50,000 URLs")
data = ("\n".join(sorted(urls)) + "\n").encode("utf-8")
if len(data) > 50 * 1024 * 1024:
raise ValueError("Split the sitemap: larger than 50 MB")
return data
def main():
parser = argparse.ArgumentParser()
parser.add_argument("folder")
parser.add_argument("origin")
parser.add_argument("publish", nargs=argparse.REMAINDER)
args = parser.parse_args()
root = Path(args.folder).resolve()
if not root.is_dir():
parser.error("The export folder must already exist")
paths = []
for file in root.rglob("*.html"):
relative = file.relative_to(root)
if (file.is_file() and file.name != "404.html"
and not any(p.startswith(".") for p in relative.parts)):
paths.append(relative.as_posix())
data = make_sitemap(paths, args.origin)
target = root / "sitemap.txt"
temporary = None
try:
with tempfile.NamedTemporaryFile(dir=root, delete=False) as handle:
temporary = Path(handle.name)
handle.write(data)
temporary.replace(target)
finally:
if temporary is not None:
temporary.unlink(missing_ok=True)
print(f"Wrote {len(data.splitlines())} URLs to {target}", flush=True)
if args.publish:
subprocess.run(args.publish, check=True)
if __name__ == "__main__":
main()
Setiap kali dijalankan, program menyusun ulang seluruh daftar URL. Program mengurutkan dan menghapus duplikat dari hasilnya, mengodekan karakter seperti spasi di jalur, lalu menulis berkas sementara sebelum mengganti sitemap.txt. Kesalahan pembuatan akan menghentikan program sebelum perintah penerbitan opsional dijalankan.
Ekspor kosong sengaja memicu kesalahan dan membiarkan sitemap sebelumnya tetap utuh. Ini membantu mendeteksi folder yang keliru dipilih atau belum lengkap. Jika memang ingin menghapus semua halaman, Anda harus mengambil keputusan penerbitan terpisah, bukan mengirimkan ekspor kosong melalui alur kerja ini.
Uji penambahan dan penghapusan sebelum menghubungkan penerbitan
Di Terminal, pindah ke folder demonstrasi Anda:
cd "$HOME/Desktop/sitemap-demo"
Buat dua halaman sintetis dengan perintah penyiapan lengkap berikut. Gunakan perintah ini di folder demonstrasi yang baru; perintah tersebut menulis dua berkas contoh yang disebutkan.
python3 - <<'PY'
from pathlib import Path
root = Path("public")
(root / "colors").mkdir(parents=True, exist_ok=True)
pages = {
"index.html": "<!doctype html><title>Color collection</title><p>Color collection.</p>",
"colors/blue.html": "<!doctype html><title>Blue tile</title><p>A blue tile.</p>",
}
for name, content in pages.items():
(root / name).write_text(content, encoding="utf-8")
PY
Buat dan periksa sitemap lokal. Asal contoh ini hanya ilustrasi; perintah ini tidak menerbitkan apa pun ke sana.
python3 regenerate_sitemap.py public https://example.com
cat public/sitemap.txt
Berkas yang diharapkan berisi tepat dua baris berikut:
https://example.com/
https://example.com/colors/blue.html
Sekarang ganti halaman sintetis berwarna biru dengan halaman hijau:
python3 - <<'PY'
from pathlib import Path
root = Path("public")
(root / "colors/blue.html").unlink()
(root / "colors/green.html").write_text(
"<!doctype html><title>Green tile</title><p>A green tile.</p>",
encoding="utf-8",
)
PY
python3 regenerate_sitemap.py public https://example.com
cat public/sitemap.txt
Hasil yang diharapkan adalah URL beranda diikuti https://example.com/colors/green.html. URL biru hilang karena berkas ekspornya sudah tidak ada. Langkah ini memeriksa kedua arah pembaruan tanpa bergantung pada mesin pencari untuk mengetahui perubahan tersebut.
Jadikan pembuatan ulang bagian dari setiap penerbitan
Untuk situs Anda yang sebenarnya, ganti folder demonstrasi dan asal dengan folder ekspor yang sudah selesai serta asal publik Anda. Jalankan generator hanya setelah ekspor selesai, dan biarkan folder tersebut tetap tidak berubah sampai penerbitan selesai. Jalankan penerbitan secara berurutan.
Jika Anda sudah memiliki skrip penerbitan yang berfungsi bernama deploy-site.sh di folder proyek, perintah integrasi berikut akan membuat sitemap lalu menjalankan skrip tersebut. Contoh ini memerlukan skrip yang sudah ada; generator tidak membuat skrip itu atau menyediakan konfigurasi hosting.
python3 regenerate_sitemap.py public https://example.com sh ./deploy-site.sh
Skrip penerbitan Anda harus mengunggah folder public yang sama, termasuk sitemap.txt, dan menghapus berkas publik yang sudah tidak ada dalam ekspor. Skrip tersebut tidak boleh membuat ulang halaman setelah sitemap dibuat. Untuk sistem penerbitan yang juga membangun situs, letakkan pembuatan sitemap di antara tahap pembangunan dan pengunggahan.
Jika pembuatan sitemap gagal, perintah penerbitan tidak akan dijalankan. Jika penerbitan gagal, Python melaporkan kegagalan tersebut, tetapi situs jarak jauh mungkin sudah berubah sebagian. Periksa hasil publik sebelum mencoba lagi. Jika host Anda mendukung penerbitan seluruh rilis secara bersamaan, gunakan mekanisme yang didokumentasikan untuk itu.
Untuk pengunggah desktop, buat sitemap sebelum memilih folder ekspor untuk diunggah. Pastikan pengunggah mengganti sitemap yang sudah ada dan menangani halaman yang dihapus. Tindakan pengunggahan tetap diperlukan; pembuatan lokal otomatis saja tidak menyediakan penerbitan publik tanpa pengawasan.
Verifikasi sitemap publik dan halaman yang dihapus secara terpisah
Setelah penerbitan berhasil, buka URL publik sitemap.txt Anda di browser. Pastikan halaman yang ditambahkan muncul dan halaman yang dihapus tidak muncul. Lalu kunjungi setiap halaman yang terdampak secara langsung. Langkah ini membedakan ekspor lokal yang benar dari rilis publik yang benar.
Menghapus entri sitemap tidak menentukan respons HTTP di alamat lama halaman tersebut. Untuk halaman yang dihapus tanpa pengganti, pastikan host mengembalikan respons halaman tidak ditemukan yang sesuai. RFC 9110 menetapkan 404 untuk sumber daya yang tidak memiliki representasi saat ini dan 410 jika diketahui bahwa sumber daya tersebut kemungkinan besar tidak tersedia secara permanen. RFC 9110: Semantik HTTP.
Halaman yang menampilkan pesan tidak ditemukan tetapi mengembalikan 200 dapat dianggap sebagai 404 lunak. Google juga mendokumentasikan bahwa URL yang sebelumnya diindeks dan mengembalikan respons 4xx yang sesuai akan dihapus dari indeksnya seiring waktu. Jadi, menghapus URL dari sitemap hanyalah salah satu bagian dari penghapusan halaman. Dampak kode status HTTP terhadap perayap Google.
Gunakan urutan diagnosis ini jika ada yang tampak keliru:
| Pengamatan | Pemeriksaan berikutnya |
|---|---|
| Sitemap lokal masih mencantumkan halaman yang dihapus | Cari berkas hasil ekspor yang tertinggal atau folder ekspor yang keliru |
| Sitemap lokal benar, tetapi salinan publik berbeda | Periksa folder yang diunggah, tujuan, dan cache |
| Sitemap publik benar, tetapi halaman yang dihapus masih terbuka | Periksa apakah penerbitan menghapus berkas lama di server jarak jauh |
| URL yang dibuat membuka halaman yang salah | Periksa pemetaan rute host terhadap konvensi nama berkas |
| URL baru sudah publik tetapi tidak muncul di pencarian | Anggap penemuan dan pengindeksan oleh mesin pencari sebagai proses terpisah |
Cache dapat menjelaskan mengapa sitemap publik masih tampak belum berubah. RFC 9111 mendefinisikan cara respons yang disimpan dalam cache tetap segar dan divalidasi ulang. Jika host mendukung konfigurasi header respons, Cache-Control: no-cache mengharuskan validasi berhasil sebelum respons tersimpan digunakan kembali; mengubah berkas lokal saja tidak mengonfigurasi header tersebut. RFC 9111: Caching HTTP.
Pertahankan satu alamat sitemap yang stabil
Buat sitemap publik mudah ditemukan dengan mengirimkan URL stabilnya melalui laporan Sitemaps di Search Console atau dengan mencantumkannya dalam berkas robots.txt yang sudah ada di situs. Google menjelaskan kedua cara tersebut dan menyebutkan bahwa pengiriman sitemap hanya merupakan petunjuk. Buat dan kirim sitemap.
Untuk situs ilustratif ini, baris penemuannya adalah:
Sitemap: https://example.com/sitemap.txt
Pertahankan alamat sitemap agar tetap stabil sambil mengganti isinya selama penerbitan. Pemeriksaan penyelesaian praktisnya adalah memastikan sitemap publik sesuai dengan ekspor yang sudah selesai, halaman yang ditambahkan terbuka di URL yang tercantum, dan halaman yang dihapus memberikan respons yang diinginkan. Mesin pencari memproses perubahan tersebut sesuai jadwal masing-masing; pencantuman dalam sitemap tidak menjamin perayapan atau pengindeksan. Pelajari tentang sitemap.
Sumber
- Buat dan kirim sitemap — Google Search Central.
- Pelajari tentang sitemap — Google Search Central.
- Format XML Sitemaps — Sitemaps.org.
- Standar HTML: Tautan — WHATWG.
- Menggunakan Python di macOS — Python Software Foundation.
- RFC 9110: Semantik HTTP — RFC Editor / IETF.
- RFC 9111: Caching HTTP — RFC Editor / IETF.
- Dampak kode status HTTP terhadap perayap Google — Infrastruktur Perayapan Google.