localization
Audit cara sesebuah halaman mengisytiharkan bahasa dan wilayahnya. Mengembalikan atribut <html lang>, pengepala Content-Language, setiap pautan hreflang rel="alternate", bahasa yang benar-benar dikesan daripada teks yang kelihatan, dan meta penyasaran geo secara pilihan — supaya anda dapat melihat di mana pengisytiharan sesebuah tapak tidak sepadan dengan kandungannya.
Kes Penggunaan
Audit hreflang
Senaraikan pautan bahasa alternatif yang diterbitkan oleh sesebuah halaman dan pastikan setnya lengkap serta saling merujuk antara lokal.
Kesan Halaman Berlabel Salah
Bandingkan html_lang dengan detected_language. Halaman yang mengisytiharkan en tetapi berbahasa Sepanyol ialah kecacatan SEO yang sebenar, dan inilah caranya ia ditemui.
Liputan Pesaing
Lihat bahasa yang benar-benar dihantar oleh pesaing, terus daripada set hreflang mereka, dan bukannya meneka daripada struktur URL mereka.
Semakan Regresi dalam CI
Sahkan language_count dan is_multilingual selepas penggunaan, supaya binaan i18n yang rosak tidak dihantar secara senyap dengan separuh lokal hilang.
Inventori Penyasaran Geo
Kumpulkan meta geo.region dan geo.position merentas sesebuah tapak untuk melihat halaman mana yang membawa isyarat serantau.
Ujian Respons Setempat
Hantar keutamaan Accept-Language bersama permintaan dan lihat sama ada pelayan mengubah apa yang dikembalikannya.
Endpoint
/api/v1/tools/localizationParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Required | - | Halaman yang akan diaudit. Mestilah URL http atau https mutlak yang sah. Example: https://example.com/pricing |
target_language | string | Optional | - | Bahasa yang anda jangkakan. Dihantar sebagai `Accept-Language` permintaan, dikembalikan semula, dan dibandingkan dengan bahasa yang dikesan serta `html_lang` untuk menghasilkan `matches_target`. Perbandingannya tepat, jadi `es` tidak sepadan dengan `es-ES`. Example: es |
target_country | string | Optional | - | Negara yang anda jangkakan. Dikembalikan semula dan dihantar sebagai pengepala permintaan `X-Country-Code`. Pengepala itu ialah konvensyen CrawlForge dan bukan standard, jadi kebanyakan pelayan akan mengabaikannya. Example: ES |
detect_language | boolean | Optional | true | Kesan bahasa daripada teks halaman yang kelihatan. Mengembalikan kod ISO 639-1, atau `und` apabila teks terlalu pendek atau bahasanya tidak dikenali. Tetapkan false dan `detected_language` kekal `und`. Example: true |
extract_hreflang | boolean | Optional | true | Kumpulkan pautan hreflang `rel="alternate"`. Tetapkan false dan `alternate_languages` kembali kosong, yang turut memaksa `language_count` kepada 0 dan `is_multilingual` kepada false. Example: true |
check_geo_targeting | boolean | Optional | false | Baca tag meta `geo.region` dan `geo.position`. Objek `geo_targeting` tiada melainkan anda memintanya. Example: true |
timeout | number | Optional | 10000 | Had masa pengambilan dalam milisaat, antara 1000 dan 30000. Example: 10000 |
respect_robots | boolean | Optional | true | Hormati robots.txt tapak sasaran. Dibiarkan pada `true`, laluan yang dilarang untuk `CrawlForge` ditolak dengan 403 sebelum apa-apa diambil dan tiada credits dicaj. Tetapkan kepada `false` hanya untuk sasaran yang anda mempunyai perjanjian sendiri dengannya — respons kemudiannya membawa entri `warnings` dan tindakan mengatasi itu direkodkan pada API key anda. Example: true |
Isyarat Yang Dibaca
lang pada elemen <html> — apa yang didakwa oleh halaman itu. null apabila tiada.Content-Language. Bebas daripada HTML, dan kerap bercanggah dengannya.<link rel="alternate" hreflang="…">, mengikut susunan dokumen. x-default dikembalikan seperti mana-mana entri lain.Contoh Permintaan
curl -X POST https://crawlforge.dev/api/v1/tools/localization \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/pricing",
"target_language": "es",
"check_geo_targeting": true
}'Contoh Respons
{ "success": true, "data": { "url": "https://example.com/pricing", "detected_language": "en", "html_lang": "en-US", "content_language_header": "en-US", "alternate_languages": [ { "lang": "en", "url": "https://example.com/pricing" }, { "lang": "es", "url": "https://example.com/es/pricing" }, { "lang": "zh-Hans", "url": "https://example.com/zh-Hans/pricing" }, { "lang": "x-default", "url": "https://example.com/pricing" } ], "language_count": 4, "is_multilingual": true, "target_language": "es", "matches_target": false, "target_country": "ES", "geo_targeted": true, "geo_targeting": { "region": "US-CA", "position": "37.7749;-122.4194", "has_geo_meta": true } }, "credits_used": 2, "credits_remaining": 998, "processing_time": 420}data.detected_languageKod ISO 639-1 yang dikesan daripada teks yang kelihatan, atau `und`. Bandingkan dengan `html_lang` — ketidakpadanan itulah penemuannyadata.html_langAtribut `lang` tepat seperti ditulis, termasuk subtag wilayah. `null` jika halaman tiadadata.content_language_headerPengepala respons `Content-Language`, atau `null`data.alternate_languagesSetiap alternatif hreflang, mengikut susunan dokumen. Susunan atribut dalam setiap tag tidak pentingdata.language_countPanjang `alternate_languages` — bukan kiraan bahasa yang berbezadata.is_multilingualTrue apabila sekurang-kurangnya satu alternatif hreflang dijumpaidata.matches_targetTrue apabila `target_language` sama dengan bahasa yang dikesan atau `html_lang`. Perbandingan rentetan yang tepat, jadi `es` gagal terhadap `es-ES`data.geo_targetedMengulang bendera `check_geo_targeting` yang anda hantar. Ia bukan keputusan — untuk itu baca `geo_targeting.has_geo_meta`data.geo_targeting.positionKandungan `geo.position` mentah, lazimnya `latitud;longitud`credits_used2 credits tetap setiap URLPengendalian Ralat
URL Tidak Sah (400 Bad Request)
VALIDATION_ERROR. url diperlukan dan mesti dihurai sebagai URL mutlak. Status yang sama meliputi timeout di luar 1000-30000.
Halaman Terlalu Besar (413 Payload Too Large)
RESPONSE_TOO_LARGE. Halaman melebihi had bacaan 25MB dan ditolak dan bukannya ditimbal.
Sasaran Tamat Masa (504 Gateway Timeout)
FETCH_TIMEOUT. Halaman berhenti bertindak balas semasa menghantar badannya. Naikkan timeout, sehingga 30000ms.
Pengambilan Gagal (502 Bad Gateway)
FETCH_FAILED. Badan respons tidak dapat dibaca — sambungan ditetapkan semula, atau badan yang bukan teks boleh nyahkod.
Analisis Gagal (500 Internal Server Error)
TOOL_ERROR. Panggilan yang gagal tidak dicaj; credits hanya ditolak selepas audit berjaya.
Disekat oleh robots.txt (403 Forbidden)
robots.txt tapak sasaran melarang laluan ini untuk CrawlForge. Tetapkan respect_robots: false untuk mengatasinya jika anda mempunyai perjanjian sendiri dengan sasaran — tindakan mengatasi itu direkodkan pada API key anda. Tindakan mengatasi itu tidak sampai kepada hos yang berada dalam senarai penarikan diri kekal CrawlForge, yang ditolak tanpa mengira nilai respect_robots.
<html lang> yang sah mengembalikan hasil biasa. Periksa status sasaran secara berasingan dengan fetch_url jika itu penting bagi anda.Kos Credit
Apa yang Disertakan:
Pengekstrakan <html lang> dan Content-Language
Set hreflang rel=alternate yang lengkap, mengikut susunan dokumen
Pengesanan bahasa trigram ke atas teks yang kelihatan
Tag meta geo.region dan geo.position
Keputusan padanan bahasa sasaran
Cadangan Pelan:
Free Plan: 1,000 credits percubaan sekali sahaja = 500 URL
Hobby Plan: 5,000 credits = 2,500 URL ($19/mo)
Professional Plan: 50,000 credits = 25,000 URL ($99/mo)