Search Engine Optimization (Seo)
Principiu
i18n.site
adopta una architettura di una sola pagina senza rinfrescante Per facilità l'indici di ricerca, una pagina statica separata è sitemap.xml
seranu generati per i crawlers.
Quandu User-Agent
di a dumanda d'accessu hè utilizatu da u crawler di u mutore di ricerca, a dumanda serà rediretta à a pagina statica via 302
.
Nant'à e pagine statiche, utilizate link
per indicà ligami à diverse versioni di lingua di sta pagina, cum'è :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Cunfigurazione nginx Locale
Pigliate u schedariu di cunfigurazione .i18n/htm/main.yml
in u prughjettu demo per esempiu
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Per piacè prima mudificà u valore di host:
sopra à u vostru nome di duminiu, cum'è xxx.com
.
Allora, i18n.site -n
, a pagina statica serà generata in u cartulare out/main/htm
.
Di sicuru, pudete ancu attivà altri schedarii di cunfigurazione, cum'è prima riferite à a cunfigurazione di main
per creà .i18n/htm/dist.package.json
è .i18n/htm/dist.yml
.
Allora eseguite i18n.site -n -c dist
per chì a pagina statica serà generata à out/dist/htm
.
nginx
pò esse stabilitu in riferimentu à a cunfigurazione sottu.
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;
# Ùn cache micca i script di u travagliu di u servitore per troppu longu
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Stabilite tempi di cache più longu per altre risorse statiche
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Stabilite u schedariu staticu chì u crawler usa cum'è l'entrata di a pagina iniziale
location = / {
# Se $botLang ùn hè micca viotu, significa l'accessu di u crawler è a redirezzione secondu u percorsu di lingua stabilitu
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Cunfigurazione di l'applicazione di una sola pagina
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/;
}
}
Configurate L'almacenamiento D'uggetti Per a Carica Di Fugliali Statici
I fugliali statichi ponu esse generati in u locu, ma un approcciu più cumuni hè di caricalli in u almacenamentu di l'ughjettu.
Mudificà out
cunfiguratu sopra à :
out:
- s3
Allora, editate ~/.config/i18n.site.yml
è aghjunghje a cunfigurazione seguente :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
In a cunfigurazione, per piacè cambià i18n.site
à u valore di host:
in .i18n/htm/main.yml
, parechje magazzini d'uggetti ponu esse cunfigurati sottu s3
, è u campu region
hè opzionale (assai magazzini d'uggetti ùn anu micca bisognu di stabilisce stu campu).
Allora eseguite i18n.site -n
per ripubblicà u prugettu.
Se avete mudificatu ~/.config/i18n.site.yml
è vulete re-upload, per piacè aduprate u cumandimu seguitu in u repertoriu radicale di u prugettu per sguassà a cache di carica :
rm -rf .i18n/data/seo .i18n/data/public
Cunfigurazione cloudflare
Nome di duminiu ospitatu à cloudflare
Reguli Di Cunversione
Aghjunghjite e regule di cunversione cum'è mostra quì sottu:
U codice di regula hè a siguenti, per piacè mudificà u codice "i18n.site" à u vostru nome di duminiu:
(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")
)
Regule Di Caching
Aghjunghjite e regule di cache cum'è seguente:
(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")
Redirect Regule
Stabilite e regule di redirezzione cum'è seguita, per piacè mudificà u codice "i18n.site" à u vostru nome di duminiu
(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
Sceglite a redirezzione dinamica, per piacè mudificà /en
in u percorsu di redirezzione concat("/en",http.request.uri.path,".htm")
à a lingua predeterminata chì vulete chì i motori di ricerca includinu.
Baidu Intelligent Cloud Configuration
Sè avete bisognu di furnisce servizii à a Cina continentale, pudete aduprà Baidu Smart Cloud .
I dati sò caricati in Baidu Object Storage è legati à Baidu Content Distribution Network.
Allora crea u script in EdgeJS serviziu di bordu cum'è seguitu
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
// L'intestazione di a risposta pò esse impostata per debug output, cum'è out.XXX = 'MSG';
})
Cliccate Debug
, dopu cliccate Publicà in tutta a reta.
Utilizazione Avanzata: Distribuite U Trafficu Basatu Annantu À a Risoluzione Regiunale
Se vulete furnisce servizii in Cina continentale è vulete ancu cloudflare
trafficu internaziunale gratuitu, pudete aduprà DNS
cù risoluzione regiunale.
Per esempiu, Huawei DNS furnisce l'analisi regiunale gratuitu, cù quale u trafficu cinese continentale pò passà per Baidu Smart Cloud, è u trafficu internaziunale pò passà per cloudflare
.
Ci hè parechje trappule in a cunfigurazione di cloudflare
Eccu uni pochi di punti da nutà :
U Nomu Di Duminiu Hè Ospitu in Altri DNS
, Cumu Utilizà cloudflare
Prima ligà un nome di duminiu arbitrariu à cloudflare
, è dopu aduprate SSL/TLS
→ nome di duminiu persunalizatu per associà u nome di duminiu principale à questu nome di duminiu.
cloudflare R2
Ùn Si Pò Accede À Traversu Un Nome Di Duminiu Persunalizatu
Perchè l'almacenamiento d'ughjettu cloudflare
R2
ùn pò micca esse accessu da un nome di duminiu persunalizatu, un almacenamentu d'ughjettu di terzu deve esse usatu per mette i schedari statichi.
Quì avemu pigliatu cum'è un esempiu per backblaze.com cumu ligà l'oggetti di terzu per esse guardatu à cloudflare
.
Crea un bucket à backblaze.com
, caricate qualsiasi fugliale, cliccate per navigà u schedariu, è uttene u nome di duminiu di Friendly URL
, chì hè f003.backblazeb2.com
quì.
Cambia u nome di duminiu da CNAME
à f003.backblazeb2.com
à cloudflare
è attivate u proxy.
Mudificà cloudflare
di SSL
→ modalità di criptografia, stabilitu à Full
Aghjunghjite a regula di cunversione cum'è mostra quì sottu, mette prima (u primu hà a priorità più bassa):
Rewrite to
selezziunate dinamica è mudificà your_bucketname
in concat("/file/your_bucketname",http.request.uri.path)
à u vostru nome di bucket.
Inoltre, in a regula di cunversione cloudflare
sopra, index.html
hè cambiatu à file/your_bucketname/index.html
, è l'altri cunfigurazioni restanu listessi.