Search Engine Optimization (Seo)
Принцип
i18n.site
жаңыланбаган бир бет архитектурасын кабыл алат, издөө индексациясын жеңилдетүү үчүн, жөрмөлөгүчтөр үчүн өзүнчө статикалык барак жана sitemap.xml
түзүлөт.
Кирүү суроо-талабынын User-Agent
издегич жөрмөлөгүч тарабынан колдонулганда, сурам 302
аркылуу статикалык бетке багытталат.
Статикалык барактарда бул барактын ар кандай тил версияларына шилтемелерди көрсөтүү үчүн link
колдонуңуз, мисалы :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Жергиликтүү nginx Конфигурациясы
Мисал катары демо долбоордогу .i18n/htm/main.yml
конфигурация файлын алалы
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Сураныч, алгач жогорудагы host:
маанисин домен атыңызга өзгөртүңүз, мисалы xxx.com
.
Андан кийин, i18n.site -n
, статикалык барак out/main/htm
каталогунда түзүлөт.
Албетте, сиз дагы башка конфигурация файлдарын иштете аласыз, мисалы, адегенде .i18n/htm/dist.package.json
жана .i18n/htm/dist.yml
түзүү үчүн main
конфигурациясына шилтеме кылуу.
Андан кийин статикалык барак out/dist/htm
түзүлө тургандай кылып i18n.site -n -c dist
иштетиңиз.
nginx
төмөнкү конфигурацияга шилтеме жасоо менен коюлушу мүмкүн.
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;
# Сервер жумушчу скрипттерин өтө узак убакытка кэштебеңиз
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Башка статикалык ресурстар үчүн көбүрөөк кэш убакыттарын коюңуз
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Кайсы статикалык файлды жөрмөлөгүч башкы бетке киргизүү катары колдоноорун коюңуз
location = / {
# Эгерде $botLang бош эмес болсо, бул белгиленген тил жолуна ылайык жөрмөлөгүч кирүү жана кайра багыттоо дегенди билдирет
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Бир беттик колдонмо конфигурациясы
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/;
}
}
Статикалык Файлдарды Жүктөө Үчүн Объект Сактагычын Конфигурациялаңыз
Статикалык файлдар локалдык түрдө түзүлүшү мүмкүн, бирок кеңири таралган ыкма аларды объект сактагычка жүктөө.
Жогоруда конфигурацияланган out
өзгөртүңүз :
out:
- s3
Андан кийин, ~/.config/i18n.site.yml
түзөтүңүз жана төмөнкү конфигурацияны кошуңуз :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
Конфигурацияда i18n.site
host:
.i18n/htm/main.yml
маанисине өзгөртүңүз, бир нече объект дүкөндөрү s3
астында конфигурацияланса болот, ал эми region
талаасы милдеттүү эмес (көп объект дүкөндөрүндө бул талааны коюунун кереги жок).
Андан кийин долбоорду кайра жарыялоо үчүн i18n.site -n
иштетиңиз.
Эгер сиз ~/.config/i18n.site.yml
өзгөрткөн болсоңуз жана кайра жүктөөнү кааласаңыз, жүктөө кэшин тазалоо үчүн долбоордун түпкү каталогунда төмөнкү буйрукту колдонуңуз :
rm -rf .i18n/data/seo .i18n/data/public
cloudflare Конфигурациясы
Домен аты жайгаштырылган cloudflare
Конверсия Эрежелери
Төмөндө көрсөтүлгөндөй конверсия эрежелерин кошуңуз:
Эреже коду төмөндөгүдөй, "i18n.site" кодун домен атыңызга өзгөртүңүз:
(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")
)
Кэштөө Эрежелери
Төмөнкүдөй кэш эрежелерин кошуу:
(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")
Багыттоо Эрежелери
Багыттоо эрежелерин төмөнкүдөй орнотуңуз, "i18n.site" кодун домен атыңызга өзгөртүңүз
(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
Динамикалык кайра багыттоону тандаңыз, сураныч, concat("/en",http.request.uri.path,".htm")
багыттоо жолундагы /en
издөө системалары камтыган демейки тилге өзгөртүңүз.
Baidu Intelligent Cloud Configuration
Эгер сиз материктик Кытайга кызмат көрсөтүү керек болсо, анда Baidu Smart Cloud колдоно аласыз.
Берилиштер Baidu объект сактагычына жүктөлүп, Baidu Content Distribution Network менен байланышкан.
Андан кийин скриптти EdgeJS кылып түзүңүз
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
// Жооптун аталыштарын мүчүлүштүктөрдү оңдоого коюуга болот, мисалы out.XXX = 'MSG';
})
Debug
чыкылдатып, андан кийин бүт тармакка жарыялоону басыңыз.
Өркүндөтүлгөн Колдонуу: Аймактык Токтомдун Негизинде Трафикти Бөлүштүрүңүз
Эгер сиз материктик Кытайда кызмат көрсөтүүнү кааласаңыз жана ошондой эле cloudflare
акысыз эл аралык трафикти кааласаңыз, анда аймактык чечим менен DNS
колдоно аласыз.
Мисалы, Huawei DNS акысыз аймактык анализди камсыз кылат, анын жардамы менен материктик кытай трафики Baidu Smart Cloud аркылуу, ал эми эл аралык трафик cloudflare
аркылуу өтүшү мүмкүн.
cloudflare
конфигурациясында көптөгөн тузактар бар. Бул жерде көңүл бура турган бир нече жагдайлар бар :
Домен Аты Башка DNS
Жайгаштырылган, cloudflare
Кантип Колдонуу Керек
Адегенде ыктыярдуу домен атын cloudflare
менен байланыштырыңыз, андан кийин SSL/TLS
→ ыңгайлаштырылган домендик аталышты бул домендик аталышка негизги домендик аталыш менен байланыштырыңыз.
cloudflare R2
Ыңгайлаштырылган Домен Аты Аркылуу Кирүү Мүмкүн Эмес
cloudflare
объект сактагычына R2
ылайыкташтырылган домен аты менен кирүү мүмкүн болбогондуктан, статикалык файлдарды жайгаштыруу үчүн үчүнчү тараптын объект сактагычын колдонуу керек.
backblaze.com жерде биз cloudflare
сактала турган үчүнчү тараптын объекттерин кантип байланыштырууну көрсөтүү үчүн мисал келтиребиз.
backblaze.com
боюнча чака түзүңүз, каалаган файлды жүктөңүз, файлды карап чыгуу үчүн чыкылдатыңыз жана бул жерде f003.backblazeb2.com
болгон Friendly URL
домен атын алыңыз.
Домендик аталышты cloudflare
CNAME
f003.backblazeb2.com
өзгөртүп, проксиди иштетиңиз.
SSL
ичинен cloudflare
→ шифрлөө режимин өзгөртүү, Full
коюу
Төмөндө көрсөтүлгөндөй конверсия эрежесин кошуңуз, аны биринчи орунга коюңуз (биринчи эң төмөнкү артыкчылыкка ээ):
Rewrite to
динамикалык тандаңыз жана чакаңыздын атына concat("/file/your_bucketname",http.request.uri.path)
your_bucketname
өзгөртүңүз.
Мындан тышкары, жогорудагы cloudflare
өзгөртүү эрежесинде index.html
file/your_bucketname/index.html
өзгөртүлүп, башка конфигурациялар ошол эле бойдон калат.