Optimització Per a Motors De Cerca (Seo)
Principi
i18n.site
adopta una arquitectura d'una sola pàgina no actualitzada Per tal de facilitar la indexació de la cerca, es generarà una pàgina estàtica separada i sitemap.xml
per als rastrejadors.
Quan el rastrejador del motor de cerca utilitza User-Agent
de la sol·licitud d'accés, la sol·licitud es redirigirà a la pàgina estàtica mitjançant 302
.
A les pàgines estàtiques, utilitzeu link
per indicar enllaços a diferents versions d'idiomes d'aquesta pàgina, com ara :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Configuració Local De nginx
Preneu com a exemple el fitxer de configuració .i18n/htm/main.yml
del projecte de demostració
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Primer modifiqueu el valor de host:
anterior al vostre nom de domini, com ara xxx.com
.
Aleshores, i18n.site -n
, la pàgina estàtica es generarà al directori out/main/htm
.
Per descomptat, també podeu habilitar altres fitxers de configuració, com ara fer referència primer a la configuració de main
per crear .i18n/htm/dist.package.json
i .i18n/htm/dist.yml
.
A continuació, executeu i18n.site -n -c dist
perquè la pàgina estàtica es generi a out/dist/htm
.
nginx
es pot establir consultant la configuració següent.
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;
# No emmagatzemeu a la memòria cau els scripts de treball del servidor durant massa temps
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Estableix temps de memòria cau més llargs per a altres recursos estàtics
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Estableix quin fitxer estàtic utilitza el rastrejador com a entrada de la pàgina d'inici
location = / {
# Si $botLang no està buit, vol dir l'accés del rastrejador i la redirecció segons la ruta d'idioma establerta
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Configuració de l'aplicació d'una sola pàgina
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/;
}
}
Configura L'emmagatzematge D'objectes Per Carregar Fitxers Estàtics
Els fitxers estàtics es poden generar localment, però un enfocament més comú és pujar-los a l'emmagatzematge d'objectes.
Modifiqueu out
configurat anteriorment a :
out:
- s3
A continuació, editeu ~/.config/i18n.site.yml
i afegiu la configuració següent :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
A la configuració, canvieu i18n.site
al valor de host:
en .i18n/htm/main.yml
, es poden configurar diversos magatzems d'objectes sota s3
i el camp region
és opcional (molts magatzems d'objectes no necessiten establir aquest camp).
A continuació, executeu i18n.site -n
per tornar a publicar el projecte.
Si heu modificat ~/.config/i18n.site.yml
i voleu tornar a carregar, utilitzeu l'ordre següent al directori arrel del projecte per esborrar la memòria cau de càrrega :
rm -rf .i18n/data/seo .i18n/data/public
Configuració De cloudflare
Nom de domini allotjat a cloudflare
Normes De Conversió
Afegiu les regles de conversió tal com es mostra a continuació:
El codi de regla és el següent, modifiqueu el codi "i18n.site" al vostre nom de domini:
(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")
)
Regles De Memòria Cau
Afegiu regles de memòria cau de la següent manera:
(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")
Regles De Redirecció
Establiu les regles de redirecció de la següent manera, modifiqueu el codi "i18n.site" al vostre nom de domini
(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
Seleccioneu la redirecció dinàmica, modifiqueu /en
al camí de redirecció concat("/en",http.request.uri.path,".htm")
a l'idioma predeterminat que voleu que incloguin els motors de cerca.
Baidu Intelligent Cloud Configuration
Si necessiteu oferir serveis a la Xina continental, podeu utilitzar Baidu Smart Cloud .
Les dades es pengen a l'emmagatzematge d'objectes de Baidu i s'uneixen a la xarxa de distribució de contingut de Baidu.
A continuació, creeu l'script al servei EdgeJS de la manera següent
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
// Les capçaleres de resposta es poden configurar per depurar la sortida, com ara out.XXX = 'MSG';
})
Feu clic a Debug
, a continuació, feu clic a Publica a tota la xarxa.
Ús Avançat: Distribueix El Trànsit en Funció De La Resolució Regional
Si voleu oferir serveis a la Xina continental i també voleu cloudflare
trànsit internacional gratuït, podeu utilitzar DNS
amb resolució regional.
Per exemple, Huawei DNS ofereix anàlisi regional gratuïta, amb la qual el trànsit de la Xina continental pot passar per Baidu Smart Cloud i el trànsit internacional pot passar per cloudflare
.
Hi ha molts inconvenients en la configuració de cloudflare
Aquí teniu alguns punts a tenir en compte :
El Nom De Domini Està Allotjat en Un Altre DNS
, Com S'utilitza cloudflare
Enllaceu primer un nom de domini arbitrari a cloudflare
i després feu servir SSL/TLS
→ nom de domini personalitzat per associar el nom de domini principal a aquest nom de domini.
No Es Pot Accedir cloudflare R2
Mitjançant Un Nom De Domini Personalitzat
Com que no es pot accedir a l'emmagatzematge d'objectes cloudflare
R2
mitjançant un nom de domini personalitzat, cal utilitzar un emmagatzematge d'objectes de tercers per col·locar fitxers estàtics.
backblaze.com prenem com a exemple per demostrar com vincular objectes de tercers per emmagatzemar-los a cloudflare
.
Creeu un cub a backblaze.com
, pengeu qualsevol fitxer, feu clic per navegar pel fitxer i obteniu el nom de domini Friendly URL
, que és f003.backblazeb2.com
aquí.
Canvieu el nom de domini d' CNAME
a f003.backblazeb2.com
a cloudflare
i activeu el proxy.
Modifiqueu cloudflare
de SSL
→ mode de xifratge, establiu-lo en Full
Afegiu la regla de conversió tal com es mostra a continuació, poseu-la primer (la primera té la prioritat més baixa):
Rewrite to
seleccioneu dinàmic i modifiqueu your_bucketname
en concat("/file/your_bucketname",http.request.uri.path)
al vostre nom de cub.
A més, a la regla de conversió cloudflare
anterior, index.html
es canvia per file/your_bucketname/index.html
i la resta de configuracions segueixen sent les mateixes.