Jana semula peta laman anda daripada set halaman awam yang siap setiap kali anda menerbitkan, kemudian muat naik kedua-duanya bersama-sama. Aliran kerja Mac ini menggunakan skrip Python ringkas untuk memasukkan halaman yang ditambah dan menggugurkan halaman yang dibuang secara automatik, dengan semakan terhadap hasil awam.
Tugas di sini ialah menyelenggara peta laman untuk laman web statik kecil yang dieksport daripada Mac. Contoh ini menggunakan halaman rekaan tentang warna. Andaian yang digunakan ialah proses penerbitan sedia ada anda boleh memuat naik folder eksport dan mengalih keluar fail usang daripada laman awam.
Pilih tempat penjanaan semula peta laman patut dilakukan
Mula-mula, semak sama ada sistem penerbitan anda sudah menjana peta laman. Google menyatakan bahawa banyak sistem pengurusan kandungan menyediakan peta laman secara automatik. Jika sistem anda berbuat demikian, semak peta laman itu selepas menambah dan membuang halaman ujian sebelum memperkenalkan penjana lain. Ketahui tentang peta laman.
Untuk eksport statik, gunakan urutan ini: selesaikan eksport halaman, jana peta laman daripada eksport itu, kemudian terbitkan folder yang terhasil. Ini ialah corak pelaksanaan yang dicadangkan: peta laman akan menggambarkan set halaman yang sama seperti yang diterima oleh penerbit.
Penjanaan semasa penerbitan juga memberikan satu aturan yang konsisten untuk penambahan dan pembuangan. Halaman yang ada dalam eksport siap akan disertakan; halaman yang tiada akan digugurkan. Tiada senarai berasingan yang perlu diingat untuk dikemas kini.
Pilih penyepaduan yang sepadan dengan persediaan sedia ada anda:
| Persediaan penerbitan sedia ada | Tempat penjanaan semula dilakukan |
|---|---|
| CMS sudah menyelenggara peta laman | Kekalkan penjana itu dan uji tindak balasnya terhadap perubahan halaman |
| Pengeksport statik menyokong arahan selepas eksport | Jalankan penjana di situ, sebelum muat naik |
| Arahan sedia ada menerbitkan folder siap | Jalankannya melalui argumen penerbitan pilihan pada penjana |
| Anda memuat naik melalui antara muka desktop | Jana dahulu, kemudian muat naik keseluruhan folder; pengemaskinian awam tanpa pengawasan memerlukan penyepaduan penerbitan yang disokong |
Skrip setempat tidak boleh mengubah laman web jauh dengan sendirinya. Aliran kerja di bawah mengautomatikkan penjanaan peta laman dan boleh melancarkan arahan penerbitan sedia ada. Muat naik sebenar tetap menjadi tanggungjawab penerbit yang anda gunakan.
Tentukan dengan tepat halaman yang patut dimasukkan dalam peta laman
Untuk URL halaman biasa, Google menerima peta laman teks yang mengandungi satu URL lengkap pada setiap baris. XML tidak diwajibkan untuk tugas ini. Sertakan URL awam pilihan bagi setiap halaman, bukannya berbilang versi URL bagi kandungan yang sama. Bina dan hantar peta laman.
Format teks memerlukan pengekodan UTF-8 dan hanya mengandungi URL, tanpa tajuk atau komen. Satu fail boleh mengandungi maksimum 50,000 URL dan 52,428,800 bait. Letakkan peta laman contoh ini di akar laman supaya ia meliputi halaman eksport di bawah lokasi tersebut. Protokol peta laman: fail teks dan lokasi.
Penjana menggunakan konvensyen eksport yang sengaja dibuat ringkas:
| Fail yang dieksport | URL awam ilustrasi |
|---|---|
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 konvensyen ini hanya jika hos anda menyajikan URL yang tepat tersebut. Jika penerbit anda menukar blue.html kepada /colors/blue/, atau menyajikan laman di bawah laluan seperti /collection/, gunakan senarai laluan atau sesuaikan pemetaan sebelum menerbitkan. Imbasan nama fail tidak dapat mengenal pasti penghalaan tersuai.
Kekalkan hanya halaman yang dimaksudkan untuk dimasukkan dalam folder eksport. Contoh ini melangkau laluan berawalan titik dan fail bernama 404.html; ia tidak memeriksa metadata halaman, perisytiharan kanonik atau peraturan ubah hala. Laman yang mempunyai syarat tambahan tersebut patut menjana peta laman daripada inventori halaman layak penerbitnya.
Teruskan menyelenggara pautan navigasi biasa juga. WHATWG mentakrifkan hiperpautan yang dibuat oleh elemen a dengan atribut href, dan Google menerangkan bahawa halaman yang dipautkan dengan betul biasanya dapat ditemui melalui navigasi. Mengemas kini peta laman patut disertai dengan kemas kini pautan yang menuju ke halaman yang ditambah atau dibuang. Piawaian HTML WHATWG: pautan, Ketahui tentang peta laman.
Cipta penjana pada Mac anda
Anda memerlukan Python 3.8 atau lebih baharu dan editor teks biasa. Dalam Terminal, jalankan python3 --version untuk menyemak penterjemah yang tersedia untuk anda. Jika anda memerlukan Python, ikut arahan pemasangan macOS daripada Python Software Foundation. Dokumentasinya juga menerangkan cara menjalankan skrip dengan python3 daripada Terminal. Menggunakan Python pada macOS.
Cipta folder bernama sitemap-demo pada Desktop anda. Simpan atur cara lengkap berikut di dalamnya dengan nama regenerate_sitemap.py. Atur cara ini menggunakan pustaka standard Python dan tidak memerlukan pakej 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, atur cara ini membina semula keseluruhan senarai URL. Ia mengisih dan membuang pendua daripada hasil, mengekod aksara seperti ruang dalam laluan, dan menulis fail sementara sebelum menggantikan sitemap.txt. Ralat penjanaan akan menghentikan atur cara sebelum arahan penerbitan pilihan dijalankan.
Eksport kosong sengaja mencetuskan ralat dan membiarkan peta laman terdahulu tanpa perubahan. Ini mengesan folder yang dipilih secara tidak sengaja atau belum lengkap. Membuang semua halaman dengan sengaja memerlukan keputusan penerbitan yang berasingan, bukannya menghantar eksport kosong melalui aliran kerja ini.
Uji penambahan dan pembuangan sebelum menyambungkan penerbitan
Dalam Terminal, masuk ke folder demonstrasi anda:
cd "$HOME/Desktop/sitemap-demo"
Cipta dua halaman rekaan dengan arahan persediaan lengkap ini. Gunakannya dalam folder demonstrasi baharu; arahan ini menulis dua fail contoh yang dinamakan.
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
Jana dan periksa peta laman setempat. Asal contoh ini hanya untuk ilustrasi; arahan ini tidak menerbitkan apa-apa kepadanya.
python3 regenerate_sitemap.py public https://example.com
cat public/sitemap.txt
Fail yang dijangka mengandungi tepat dua baris ini:
https://example.com/
https://example.com/colors/blue.html
Sekarang gantikan halaman biru rekaan 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 dijangka ialah URL laman utama diikuti https://example.com/colors/green.html. URL biru hilang kerana fail eksportnya sudah tiada. Ini menguji kedua-dua arah kemas kini tanpa bergantung pada enjin carian untuk mengesan perubahan tersebut.
Jadikan penjanaan semula sebahagian daripada setiap penerbitan
Untuk laman sebenar anda, gantikan folder demonstrasi dan asal dengan folder eksport siap dan asal awam sebenar anda. Jalankan penjana hanya selepas eksport selesai, dan jangan ubah folder itu sehingga penerbitan selesai. Jalankan penerbitan secara berurutan.
Jika anda sudah mempunyai skrip penerbitan yang berfungsi bernama deploy-site.sh dalam folder projek, arahan penyepaduan berikut menjana peta laman kemudian menjalankan skrip itu. Contoh ini memerlukan skrip sedia ada; penjana tidak menciptanya atau menyediakan konfigurasi pengehosan.
python3 regenerate_sitemap.py public https://example.com sh ./deploy-site.sh
Skrip penerbitan anda mesti memuat naik folder public yang sama, termasuk sitemap.txt, dan membuang fail awam yang sudah tiada dalam eksport. Skrip itu tidak boleh membina semula halaman selepas peta laman dijana. Untuk penerbit yang turut membina laman, letakkan penjanaan di antara peringkat binaan dan muat naik.
Jika penjanaan gagal, arahan penerbitan tidak akan dijalankan. Jika penerbitan gagal, Python melaporkan kegagalan itu, tetapi laman jauh mungkin sudah berubah sebahagiannya. Periksa hasil awam sebelum mencuba semula. Jika hos anda menyokong penerbitan satu keluaran lengkap secara serentak, gunakan mekanisme yang didokumenkan itu.
Bagi pemuat naik desktop, jana peta laman sebelum memilih folder eksport untuk dimuat naik. Pastikan pemuat naik menggantikan peta laman sedia ada dan mengendalikan halaman yang dibuang. Tindakan muat naik masih diperlukan; penjanaan setempat secara automatik sahaja tidak menyediakan penerbitan awam tanpa pengawasan.
Sahkan peta laman awam dan halaman yang dibuang secara berasingan
Selepas penerbitan berjaya, buka URL awam sebenar sitemap.txt dalam pelayar. Semak bahawa halaman yang ditambah muncul dan halaman yang dibuang tiada. Kemudian lawati setiap halaman yang terjejas secara terus. Ini membezakan eksport setempat yang betul daripada keluaran awam yang betul.
Memadam entri peta laman tidak menentukan respons HTTP di alamat lama halaman itu. Bagi halaman yang dibuang tanpa pengganti, semak bahawa hos memberikan respons halaman tiada yang sesuai. RFC 9110 mentakrifkan 404 untuk sumber tanpa perwakilan semasa dan 410 apabila diketahui bahawa ketiadaannya mungkin kekal. RFC 9110: Semantik HTTP.
Halaman yang memaparkan mesej halaman tiada tetapi memberikan 200 boleh dianggap sebagai 404 palsu. Google juga menerangkan bahawa URL yang pernah diindeks dan memberikan respons 4xx yang berkenaan akan dikeluarkan daripada indeksnya dari semasa ke semasa. Oleh itu, membuang URL daripada peta laman hanyalah satu bahagian daripada proses membuang halaman. Cara kod status HTTP mempengaruhi perangkak Google.
Gunakan urutan diagnosis ini apabila sesuatu kelihatan tidak betul:
| Pemerhatian | Semakan seterusnya |
|---|---|
| Peta laman setempat masih menyenaraikan halaman yang dibuang | Cari fail eksport yang tertinggal atau folder eksport yang salah |
| Peta laman setempat betul, tetapi salinan awam berbeza | Semak folder yang dimuat naik, destinasi dan cache |
| Peta laman awam betul, tetapi halaman yang dibuang masih terbuka | Semak sama ada penerbitan membuang fail jauh yang lama |
| URL yang dijana membuka halaman yang salah | Semak pemetaan laluan hos berbanding konvensyen nama fail |
| URL baharu tersedia secara awam tetapi tiada dalam carian | Anggap penemuan dan pengindeksan carian sebagai proses berasingan |
Cache boleh menerangkan sebab peta laman awam masih kelihatan tidak berubah. RFC 9111 mentakrifkan cara respons cache kekal segar dan disahkan semula. Jika hos anda menyokong konfigurasi pengepala respons, Cache-Control: no-cache memerlukan pengesahan yang berjaya sebelum respons tersimpan digunakan semula; mengubah fail setempat sahaja tidak mengkonfigurasi pengepala itu. RFC 9111: Pengecaching HTTP.
Kekalkan satu alamat peta laman yang stabil
Jadikan peta laman awam mudah ditemui dengan menghantar URL stabilnya melalui laporan Sitemaps Search Console atau merujuknya dalam fail robots.txt sedia ada pada laman. Google menerangkan kedua-dua kaedah dan menyatakan bahawa penghantaran itu sekadar petunjuk. Bina dan hantar peta laman.
Bagi laman ilustrasi, baris penemuan ialah:
Sitemap: https://example.com/sitemap.txt
Kekalkan alamat peta laman yang sama sambil menggantikan kandungannya semasa penerbitan. Semakan praktikal untuk memastikan semuanya selesai ialah peta laman awam sepadan dengan eksport siap, halaman yang ditambah terbuka pada URL yang disenaraikan, dan halaman yang dibuang memberikan respons yang dimaksudkan. Enjin carian memproses perubahan itu mengikut jadual masing-masing; kemasukan dalam peta laman tidak menjamin perayapan atau pengindeksan. Ketahui tentang peta laman.
Sumber
- Bina dan hantar peta laman — Google Search Central.
- Ketahui tentang peta laman — Google Search Central.
- Format XML peta laman — Sitemaps.org.
- Piawaian HTML: pautan — WHATWG.
- Menggunakan Python pada macOS — Python Software Foundation.
- RFC 9110: Semantik HTTP — RFC Editor / IETF.
- RFC 9111: Pengecaching HTTP — RFC Editor / IETF.
- Cara kod status HTTP mempengaruhi perangkak Google — Google Crawling Infrastructure.