Optimizacija Iskalnikov (Seo)
Načelo
i18n.site
sprejme arhitekturo ene strani brez osveževanja, da se olajša indeksiranje iskanja, bosta pajkom ustvarjena ločena statična stran in sitemap.xml
.
Ko pajek iskalnika uporabi User-Agent
zahteve za dostop, bo zahteva preusmerjena na statično stran prek 302
.
Na statičnih straneh uporabite link
da označite povezave do različnih jezikovnih različic te strani, kot je :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Lokalna Konfiguracija nginx
Kot primer vzemite konfiguracijsko datoteko .i18n/htm/main.yml
v predstavitvenem projektu
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Najprej spremenite zgornjo vrednost host:
za ime vaše domene, na primer xxx.com
.
Nato bo i18n.site -n
generirana statična stran v imeniku out/main/htm
.
Seveda lahko omogočite tudi druge konfiguracijske datoteke, na primer, da se najprej sklicujete na konfiguracijo main
, da ustvarite .i18n/htm/dist.package.json
in .i18n/htm/dist.yml
.
Nato zaženite i18n.site -n -c dist
, da bo statična stran ustvarjena na out/dist/htm
.
nginx
lahko nastavite tako, da upoštevate spodnjo konfiguracijo.
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;
# Skriptov strežniških delavcev ne shranjujte predolgo v predpomnilnik
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Nastavite daljši čas predpomnilnika za druge statične vire
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Nastavite, katero statično datoteko pajek uporablja kot vnos domače strani
location = / {
# Če $botLang ni prazno, pomeni dostop pajka in preusmeritev glede na nastavljeno jezikovno pot
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Konfiguracija enostranske aplikacije
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/;
}
}
Konfigurirajte Shranjevanje Predmetov Za Nalaganje Statičnih Datotek
Statične datoteke je mogoče ustvariti lokalno, vendar je pogostejši pristop, da jih naložite v shrambo objektov.
Spremenite zgoraj konfigurirano out
v :
out:
- s3
Nato uredite ~/.config/i18n.site.yml
in dodajte naslednjo konfiguracijo :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
V konfiguraciji spremenite i18n.site
na vrednost host:
v .i18n/htm/main.yml
, več shramb objektov je mogoče konfigurirati pod s3
, polje region
pa ni obvezno (mnogim shrambam objektov tega polja ni treba nastaviti).
Nato zaženite i18n.site -n
da ponovno objavite projekt.
Če ste spremenili ~/.config/i18n.site.yml
in želite znova naložiti, uporabite naslednji ukaz v korenskem imeniku projekta, da počistite predpomnilnik nalaganja :
rm -rf .i18n/data/seo .i18n/data/public
Konfiguracija cloudflare
Ime domene gosti cloudflare
Pravila Pretvorbe
Dodajte pravila pretvorbe, kot je prikazano spodaj:
Koda pravila je naslednja, spremenite kodo "i18n.site" v ime svoje domene:
(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")
)
Pravila Predpomnjenja
Pravila predpomnilnika dodajte na naslednji način:
(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")
Pravila Preusmeritve
Nastavite pravila preusmeritve, kot sledi, spremenite kodo "i18n.site" v ime svoje domene
(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
Izberite dinamično preusmeritev, spremenite /en
v preusmeritveni poti concat("/en",http.request.uri.path,".htm")
na privzeti jezik, ki ga želite vključiti v iskalnike.
Konfiguracija Inteligentnega Oblaka Baidu
Če morate zagotavljati storitve celinski Kitajski, lahko uporabite Baidu Smart Cloud .
Podatki se naložijo v Baidu Object Storage in povežejo z Baidu Content Distribution Network.
Nato ustvarite skript v storitvi EdgeJS edge , kot sledi
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
// Glavo odgovora lahko nastavite za odpravljanje napak v izhodu, na primer out.XXX = 'MSG';
})
Kliknite Debug
in nato Objavi v celotnem omrežju.
Napredna Uporaba: Porazdelite Promet Na Podlagi Regionalne Ločljivosti
Če želite zagotavljati storitve v celinski Kitajski in želite tudi cloudflare
brezplačnega mednarodnega prometa, lahko uporabite DNS
z regionalno ločljivostjo.
Na primer, Huawei Cloud DNS zagotavlja brezplačno regionalno analizo, s katero lahko celinski kitajski promet poteka skozi Baidu Smart Cloud, mednarodni promet pa lahko poteka skozi cloudflare
.
V konfiguraciji cloudflare
je veliko pasti. Tukaj je nekaj točk, ki jih je treba upoštevati :
Ime Domene Gostuje v Drugem DNS
, Kako Uporabljati cloudflare
Najprej povežite poljubno ime domene z cloudflare
in nato uporabite SSL/TLS
→ ime domene po meri, da glavno ime domene povežete s tem imenom domene.
cloudflare R2
Ni Mogoče Dostopati Prek Imena Domene Po Meri
Ker do cloudflare
pomnilnika objektov R2
ni mogoče dostopati s prilagojenim imenom domene, je treba za namestitev statičnih datotek uporabiti pomnilnik objektov tretje osebe.
backblaze.com vzamemo primer, da pokažemo, kako povezati objekte tretjih oseb, ki bodo shranjeni na cloudflare
.
Ustvarite vedro pri backblaze.com
, naložite katero koli datoteko, kliknite za brskanje po datoteki in pridobite ime domene Friendly URL
, ki je tukaj f003.backblazeb2.com
.
Spremenite ime domene iz CNAME
v f003.backblazeb2.com
pri cloudflare
in omogočite proxy.
Spremeni cloudflare
od SSL
→ način šifriranja, nastavljen na Full
Dodajte pravilo pretvorbe, kot je prikazano spodaj, postavite ga na prvo mesto (prvo ima najnižjo prednost):
Rewrite to
izberite dinamično in spremenite your_bucketname
v concat("/file/your_bucketname",http.request.uri.path)
v ime vašega vedra.
Poleg tega se v zgornjem pravilu pretvorbe cloudflare
index.html
spremeni v file/your_bucketname/index.html
, druge konfiguracije pa ostanejo enake.