Эзләү Двигательен Оптимизацияләү (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">
Localирле 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
конфигурациясенә мөрәҗәгать итү кебек.
Аннары i18n.site -n -c dist
эшләгез, статик бит out/dist/htm
чыгарылсын.
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/;
}
}
Статик Файлларны Йөкләү Өчен Объект Саклауны Конфигурацияләгез
Статик файллар җирле ясалырга мөмкин, ләкин киң таралган ысул - аларны объект саклауга йөкләү.
Aboveгарыда конфигурацияләнгән 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
.i18n/htm/main.yml
-дән host:
-гә үзгәртегез, берничә объект кибете s3
яшькә кадәр конфигурацияләнергә мөмкин, һәм region
кыр факультатив (күп объект кибетләренә бу кырны куярга кирәк түгел).
Аннары проектны бастыру өчен i18n.site -n
йөгерегез.
Әгәр дә сез ~/.config/i18n.site.yml
үзгәрттегез һәм яңадан йөкләргә телисез икән, зинһар, проект тамыр каталогында йөкләү кэшын чистарту өчен түбәндәге боерыкны кулланыгыз :
rm -rf .i18n/data/seo .i18n/data/public
Болыт Конфигурациясе
Домен исеме 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 Интеллектуаль Болыт Конфигурациясе
Әгәр дә сез Кытай материкларына хезмәт күрсәтергә тиеш булсагыз, сез Baidu Smart Cloud куллана аласыз.
Мәгълүматлар Baidu объект саклауга йөкләнә һәм Baidu эчтәлеген тарату челтәренә бәйләнә.
Аннары сценарийны кыр читендә ясагыз 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
// Headавап башлыкларын чыгару өчен көйләргә мөмкин, мәсәлән, out.XXX = 'MSG';
})
Debug
басыгыз, аннары бөтен челтәргә бастырырга басыгыз.
Алдынгы Куллану: Региональ Резолюция Нигезендә Трафикны Таратыгыз
Әгәр дә сез Кытайның материкларында хезмәт күрсәтергә телисез, шулай ук cloudflare
бушлай халыкара трафик телисез икән, сез региональ резолюция белән DNS
куллана аласыз.
Мәсәлән, Huawei DNS бушлай региональ анализ бирә, аның белән материк Кытай трафикы Baidu Smart Cloud аша уза ала, һәм халыкара трафик cloudflare
аша үтәргә мөмкин.
cloudflare
конфигурациясендә бик күп тозаклар бар. Монда берничә игътибарга лаек :
Домен Исеме Бүтән DNS
Урнаштырылган, cloudflare
Ничек Кулланырга
Башта теләсә нинди домен исемен cloudflare
белән бәйләгез, аннары төп домен исемен бу домен исеменә бәйләү өчен SSL/TLS
→ махсус домен исемен кулланыгыз.
cloudflare R2
Махсус Домен Исеме Аша Кереп Булмый
Төзелгән cloudflare
объект саклагычында R2
махсуслаштырылган домен исеме белән кереп булмый, статик файллар урнаштыру өчен өченче як объект саклауны кулланырга кирәк.
Монда без өченче як әйберләрне ничек бәйләргә һәм аларны cloudflare
итеп сакларга икәнен мисал итеп алабыз backblaze.com
backblaze.com
чиләк ясагыз, теләсә f003.backblazeb2.com
Friendly URL
исемен алыгыз.
Домен исемен CNAME
дән cloudflare
f003.backblazeb2.com
кадәр үзгәртегез һәм прокси эшләгез.
SSL
→ Full
режимының cloudflare
үзгәртегез
Түбәндә күрсәтелгәнчә конверсия кагыйдәсен өстәгез, аны беренче урынга куегыз (беренчесе иң түбән өстенлеккә ия):
Rewrite to
динамиканы сайлагыз һәм concat("/file/your_bucketname",http.request.uri.path)
your_bucketname
чиләк исеменә үзгәртегез.
Моннан тыш, өстә cloudflare
конверсия кагыйдәсендә index.html
file/your_bucketname/index.html
үзгәртелә, һәм башка конфигурацияләр элеккечә кала.