Qidiruv Tizimini Optimallashtirish (Seo)
Tamoyil
i18n.site
yangilanmaydigan yagona sahifa arxitekturasini qabul qiladi, qidiruvni indekslashni osonlashtirish uchun brauzerlar skanerlashi uchun alohida statik sahifa va sitemap.xml
yaratiladi.
Kirish so'rovining User-Agent
qidiruv tizimi brauzeri tomonidan foydalanilganda, so'rov 302
orqali statik sahifaga yo'naltiriladi.
Statik sahifalarda ushbu sahifaning turli til versiyalariga havolalarni ko'rsatish uchun link
foydalaning, masalan :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Mahalliy nginx Konfiguratsiyasi
Misol sifatida demo loyihasidagi .i18n/htm/main.yml
konfiguratsiya faylini oling
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Iltimos, avval yuqoridagi host:
qiymatini domen nomingizga o'zgartiring, masalan, xxx.com
.
Keyin, i18n.site -n
, statik sahifa out/main/htm
katalogida hosil bo'ladi.
Albatta, siz boshqa konfiguratsiya fayllarini ham yoqishingiz mumkin, masalan, birinchi navbatda .i18n/htm/dist.package.json
va .i18n/htm/dist.yml
ni yaratish uchun main
konfiguratsiyasiga murojaat qilish.
Keyin i18n.site -n -c dist
ishga tushiring, shunda statik sahifa out/dist/htm
ga yaratiladi.
nginx
quyidagi konfiguratsiyaga murojaat qilish orqali o'rnatish mumkin.
map $http_user_agent $botLang {
"~*baidu|yisou|sogou|360|byte" "/zh";
"~*facebookexternalhit|slurp|bot|spider|curl" "/en";
default "";
}
server {
http2 on;
listen 443 quic ;
listen 443 ssl ;
listen [::]:443 quic ;
listen [::]:443 ssl ;
add_header Alt-Svc 'h3=":443";ma=99999;persist=1';
server_name doc.flashduty.com;
ssl_certificate /root/.acme.sh/doc.flashduty.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/doc.flashduty.com_ecc/doc.flashduty.com.key;
root /mnt/doc.flashduty.com;
# Server ishchi skriptlarini uzoq vaqt keshlamang
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Boshqa statik resurslar uchun uzoqroq kesh vaqtlarini belgilang
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Brauzer bosh sahifa yozuvi sifatida qaysi statik fayldan foydalanishini belgilang
location = / {
# Agar $botLang bo'sh bo'lmasa, bu o'rnatilgan til yo'liga ko'ra brauzer orqali kirish va qayta yo'naltirishni anglatadi
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Bir sahifali dastur konfiguratsiyasi
location / {
if ($botLang) {
return 302 $botLang$request_uri.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
}
server {
server_name doc.flashduty.com;
listen 80;
listen [::]:80 ;
location / {
rewrite ^(.+) https://$host$1 permanent;
}
location /.well-known/acme-challenge/ {
root /mnt/doc.flashduty.com/;
}
}
Statik Fayllarni Yuklash Uchun Ob'ekt Xotirasini Sozlang
Statik fayllar mahalliy sifatida yaratilishi mumkin, ammo keng tarqalgan yondashuv ularni ob'ekt xotirasiga yuklashdir.
Yuqorida sozlangan out
ga o'zgartiring :
out:
- s3
Keyin ~/.config/i18n.site.yml
tahrirlang va quyidagi konfiguratsiyani qo'shing :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
Konfiguratsiyada i18n.site
.i18n/htm/main.yml
host:
qiymatiga o'zgartiring, s3
ostida bir nechta ob'ektlar do'konlari sozlanishi mumkin va region
maydoni ixtiyoriy (ko'p ob'ektlar do'konlarida bu maydonni o'rnatish shart emas).
Keyin loyihani qayta nashr qilish uchun i18n.site -n
ishga tushiring.
Agar siz ~/.config/i18n.site.yml
o'zgartirgan bo'lsangiz va qayta yuklamoqchi bo'lsangiz, yuklash keshini tozalash uchun loyihaning ildiz katalogidagi quyidagi buyruqdan foydalaning :
rm -rf .i18n/data/seo .i18n/data/public
cloudflare Konfiguratsiyasi
Domen nomi joylashtirilgan cloudflare
Konvertatsiya Qilish Qoidalari
Quyida ko'rsatilgandek aylantirish qoidalarini qo'shing:
Qoida kodi quyidagicha, iltimos "i18n.site" kodini domen nomingizga o'zgartiring:
(http.host in {"i18n.site"}) and not (
substring(http.request.uri.path,-3) in {".js" ".gz"} or
substring(http.request.uri.path,-4) in {".htm" ".rss" ".css" ".svg" ".ico" ".png" ".xml" ".txt"} or
substring(http.request.uri.path,-5) in {".html" ".avif" ".json"} or
ends_with(http.request.uri.path,".webmanifest")
)
Keshlash Qoidalari
Kesh qoidalarini quyidagi tarzda qo'shing:
(substring(http.request.uri.path,-4) in {".htm" ".rss"}) or ends_with(http.request.uri.path,"/sitemap.xml") or ends_with(http.request.uri.path,".xml.gz")
Qayta Yo'naltirish Qoidalari
Qayta yo'naltirish qoidalarini quyidagicha o'rnating, iltimos, "i18n.site" kodini domen nomingizga o'zgartiring.
(http.host in {"i18n.site"}) and not (
substring(http.request.uri.path,-3) in {".js" ".gz"} or
substring(http.request.uri.path,-4) in {".htm" ".rss" ".css" ".svg" ".ico" ".png" ".xml" ".txt"} or
substring(http.request.uri.path,-5) in {".html" ".avif" ".json"} or
ends_with(http.request.uri.path,".webmanifest")
) and (
http.user_agent wildcard "*bot*" or
http.user_agent wildcard "*spider*" or
http.user_agent wildcard "*facebookexternalhit*" or
http.user_agent wildcard "*slurp*" or
http.user_agent wildcard "curl*" or
http.user_agent wildcard "*InspectionTool*"
)
URL redirect
Dinamik qayta yoʻnaltirishni tanlang, iltimos, concat("/en",http.request.uri.path,".htm")
qayta yoʻnaltirish yoʻlidagi /en
qidiruv tizimlari kiritmoqchi boʻlgan standart tilga oʻzgartiring.
Baidu Intelligent Cloud Configuration
Agar siz materik Xitoyga xizmat ko'rsatishingiz kerak bo'lsa, Baidu Smart Cloud-dan foydalanishingiz mumkin.
Ma'lumotlar Baidu Object Storage-ga yuklanadi va Baidu Content Distribution Network bilan bog'lanadi.
Keyin skriptni EdgeJS xizmatida quyidagicha yarating
const uri = r.uri, p = uri.lastIndexOf(".");
if (
p < 0 ||
!"|js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest|".includes(
"|" + uri.slice(p + 1) + "|",
)
) {
const ua = r.headersIn["User-Agent"].toLowerCase()
if (/facebookexternalhit|slurp|bot|spider|curl/.test(ua)) {
r.return(
302,
(/baidu|yisou|sogou|360|byte/.test(ua) ? "/zh" : "/en") + r.uri + ".htm",
)
} else {
r.uri = "/index.html"
}
}
r.respHeader(() => {
const t = [], out = r.headersOut;
["Content-MD5", "Age", "Expires", "Last-Modified"].forEach(
i => delete out[i]
)
r.rawHeadersOut.forEach(i => {
const key = i[0].toLowerCase()
if (key.startsWith("x-") || key.startsWith("ohc-")) {
delete out[key]
}
})
out["Cache-Control"] = "max-age=" + 9e5
// Javob sarlavhalari chiqishni disk raskadrovka qilish uchun sozlanishi mumkin, masalan, out.XXX = 'MSG';
})
Debug
bosing, so'ngra butun tarmoqqa nashr qilish tugmasini bosing.
Kengaytirilgan Foydalanish: Mintaqaviy Ruxsat Asosida Trafikni Taqsimlang
Agar siz Xitoyning materik hududida xizmatlarni taqdim qilmoqchi bo'lsangiz va cloudflare
bepul xalqaro trafikni istasangiz, mintaqaviy ruxsat bilan DNS
foydalanishingiz mumkin.
Masalan, Huawei DNS bepul mintaqaviy tahlilni taqdim etadi, uning yordamida materik Xitoy trafiki Baidu Smart Cloud orqali, xalqaro trafik esa cloudflare
dan o'tishi mumkin.
cloudflare
konfiguratsiyasida ko'plab tuzoqlar mavjud. Bu erda bir nechta fikrlarni e'tiborga olish kerak :
Domen Nomi Boshqa DNS
Da Joylashtirilgan, cloudflare
Qanday Foydalanish Kerak
Avval ixtiyoriy domen nomini cloudflare
ga bog'lang, so'ngra asosiy domen nomini ushbu domen nomi bilan bog'lash uchun SSL/TLS
→ maxsus domen nomidan foydalaning.
cloudflare R2
Maxsus Domen Nomi Orqali Kirish Mumkin Emas
cloudflare
ob'ekt xotirasiga R2
moslashtirilgan domen nomi orqali kirish mumkin emasligi sababli, statik fayllarni joylashtirish uchun uchinchi tomon ob'ekt xotirasidan foydalanish kerak.
backblaze.com erda biz uchinchi tomon ob'ektlarini qanday bog'lash va ularni cloudflare
ga saqlashni ko'rsatish uchun misol keltiramiz.
backblaze.com
da chelak yarating, istalgan faylni yuklang, faylni ko‘rib chiqish uchun bosing va bu yerda f003.backblazeb2.com
bo‘lgan Friendly URL
domen nomini oling.
Domen nomini cloudflare
da CNAME
dan f003.backblazeb2.com
o'zgartiring va proksi-serverni yoqing.
cloudflare
/ SSL
ni o'zgartiring → shifrlash rejimi, Full
ga o'rnating
Quyida ko'rsatilgandek aylantirish qoidasini qo'shing, uni birinchi o'ringa qo'ying (birinchisi eng past ustuvorlikka ega):
Rewrite to
dinamikni tanlang va paqir nomiga your_bucketname
dan concat("/file/your_bucketname",http.request.uri.path)
o'zgartiring.
Bundan tashqari, yuqoridagi cloudflare
o'tkazish qoidasida index.html
file/your_bucketname/index.html
ga o'zgartiriladi va boshqa konfiguratsiyalar bir xil bo'lib qoladi.