Ottimizzazione Per I Motori Di Ricerca (Seo)
Principio
i18n.site
adotta un'architettura a pagina singola senza aggiornamento Per facilitare l'indicizzazione della ricerca, verranno generate una pagina statica separata e sitemap.xml
per la scansione da parte dei crawler.
Quando User-Agent
della richiesta di accesso viene utilizzato dal crawler del motore di ricerca, la richiesta verrà reindirizzata alla pagina statica tramite 302
.
Nelle pagine statiche, utilizzare link
per indicare collegamenti a versioni in lingue diverse di questa pagina, ad esempio :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Configurazione nginx Locale
Prendiamo come esempio il file di configurazione .i18n/htm/main.yml
nel progetto demo
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Per prima cosa modifica il valore host:
sopra nel tuo nome di dominio, ad esempio xxx.com
.
Quindi, i18n.site -n
, la pagina statica verrà generata nella directory out/main/htm
.
Naturalmente, puoi anche abilitare altri file di configurazione, ad esempio facendo riferimento prima alla configurazione di main
per creare .i18n/htm/dist.package.json
e .i18n/htm/dist.yml
.
Quindi esegui i18n.site -n -c dist
in modo che la pagina statica venga generata su out/dist/htm
.
nginx
può essere impostato facendo riferimento alla configurazione seguente.
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;
# Non memorizzare nella cache gli script di lavoro del server per troppo tempo
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Imposta tempi di cache più lunghi 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";
}
# Imposta il file statico utilizzato dal crawler come voce della home page
location = / {
# Se $botLang non è vuoto, significa accesso e reindirizzamento del crawler in base al percorso linguistico impostato
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Configurazione dell'applicazione a pagina singola
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/;
}
}
Configurare L'archiviazione Di Oggetti Per Il Caricamento Di File Statici
I file statici possono essere generati localmente, ma un approccio più comune consiste nel caricarli nell'archivio oggetti.
Modificare out
configurato sopra in :
out:
- s3
Quindi, modifica ~/.config/i18n.site.yml
e aggiungi la seguente configurazione :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
Nella configurazione, modificare i18n.site
nel valore di host:
in .i18n/htm/main.yml
, è possibile configurare più archivi di oggetti in s3
e il campo region
è facoltativo (molti archivi di oggetti non necessitano di impostare questo campo).
Quindi esegui i18n.site -n
per ripubblicare il progetto.
Se hai modificato ~/.config/i18n.site.yml
e desideri ricaricare, utilizza il seguente comando nella directory root del progetto per svuotare la cache di caricamento :
rm -rf .i18n/data/seo .i18n/data/public
Configurazione Di cloudflare
Nome di dominio ospitato su cloudflare
Regole Di Conversione
Aggiungi le regole di conversione come mostrato di seguito:
Il codice della regola è il seguente, modifica il codice "i18n.site" nel tuo nome di dominio:
(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")
)
Regole Di Memorizzazione Nella Cache
Aggiungi le regole della cache come segue:
(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")
Regole Di Reindirizzamento
Imposta le regole di reindirizzamento come segue, modifica il codice "i18n.site" nel tuo nome di dominio
(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
Seleziona il reindirizzamento dinamico, modifica /en
nel percorso di reindirizzamento concat("/en",http.request.uri.path,".htm")
nella lingua predefinita che desideri includere nei motori di ricerca.
Configurazione Del Cloud Intelligente Baidu
Se devi fornire servizi alla Cina continentale, puoi utilizzare Baidu Smart Cloud .
I dati vengono caricati su Baidu Object Storage e associati alla rete di distribuzione dei contenuti Baidu.
Quindi creare lo script nel servizio Edge 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
// Le intestazioni di risposta possono essere impostate per eseguire il debug dell'output, ad esempio out.XXX = 'MSG';
})
Fare clic su Debug
, quindi su Pubblica su tutta la rete.
Utilizzo Avanzato: Distribuisci Il Traffico in Base Alla Risoluzione Regionale
Se desideri fornire servizi nella Cina continentale e desideri anche cloudflare
traffico internazionale gratuito, puoi utilizzare DNS
con risoluzione regionale.
Ad esempio, Huawei Cloud DNS fornisce analisi regionali gratuite, con le quali il traffico della Cina continentale può passare attraverso Baidu Smart Cloud e il traffico internazionale può passare attraverso cloudflare
.
Ci sono molte insidie nella configurazione di cloudflare
Ecco alcuni punti da notare :
Il Nome Di Dominio È Ospitato in Altri DNS
, Come Utilizzare cloudflare
Per prima cosa associa un nome di dominio arbitrario a cloudflare
, quindi utilizza SSL/TLS
→ nome di dominio personalizzato per associare il nome di dominio principale a questo nome di dominio.
Non È Possibile Accedere cloudflare R2
Tramite Un Nome Di Dominio Personalizzato
Poiché non è possibile accedere all'object storage R2
cloudflare
tramite un nome di dominio personalizzato, è necessario utilizzare un object storage di terze parti per posizionare file statici.
Qui prendiamo backblaze.com come esempio per dimostrare come associare oggetti di terze parti da archiviare su cloudflare
.
Crea un bucket su backblaze.com
, carica qualsiasi file, fai clic per sfogliare il file e ottieni il nome di dominio Friendly URL
, che qui è f003.backblazeb2.com
.
Cambia il nome del dominio da CNAME
a f003.backblazeb2.com
a cloudflare
e abilita il proxy.
Modifica cloudflare
di SSL
→ modalità di crittografia, imposta su Full
Aggiungi la regola di conversione come mostrato di seguito, mettila per prima (la prima ha la priorità più bassa):
Rewrite to
seleziona dinamico e modifica your_bucketname
in concat("/file/your_bucketname",http.request.uri.path)
con il nome del tuo bucket.
Inoltre, nella regola di conversione cloudflare
di cui sopra, index.html
viene modificato in file/your_bucketname/index.html
e le altre configurazioni rimangono le stesse.