Sökmotoroptimering (Seo)
Princip
i18n.site
antar en enkelsidesarkitektur som inte uppdateras. För att underlätta sökindexering kommer en separat statisk sida och sitemap.xml
att genereras för sökrobotar.
När User-Agent
:an för åtkomstbegäran används av sökmotorns sökrobot, omdirigeras begäran till den statiska sidan via 302
.
På statiska sidor, använd link
för att indikera länkar till olika språkversioner av denna sida, som :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Lokal Nginx-Konfiguration
Ta konfigurationsfilen .i18n/htm/main.yml
i demoprojektet som ett exempel
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Ändra först värdet på host:
ovan för ditt domännamn, till exempel xxx.com
.
Sedan, i18n.site -n
, kommer den statiska sidan att genereras i katalogen out/main/htm
.
Naturligtvis kan du även aktivera andra konfigurationsfiler, som att först hänvisa till konfigurationen av main
för att skapa .i18n/htm/dist.package.json
och .i18n/htm/dist.yml
.
Kör sedan i18n.site -n -c dist
så att den statiska sidan genereras till out/dist/htm
.
nginx
kan ställas in genom att hänvisa till konfigurationen nedan.
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;
# Cachelagra inte serverarbetarskript för länge
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Ställ in längre cachetider för andra statiska resurser
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Ställ in vilken statisk fil som sökroboten använder som startsida
location = / {
# Om $botLang inte är tom, betyder det sökrobotåtkomst och omdirigering enligt den inställda språksökvägen
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Ensidig applikationskonfiguration
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/;
}
}
Konfigurera Objektlagring För Uppladdning Av Statiska Filer
Statiska filer kan genereras lokalt, men ett vanligare tillvägagångssätt är att ladda upp dem till objektlagring.
Ändra out
som konfigurerats ovan till :
out:
- s3
Redigera sedan ~/.config/i18n.site.yml
och lägg till följande konfiguration :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
I konfigurationen ändrar du i18n.site
till värdet host:
i .i18n/htm/main.yml
, flera objektlager kan konfigureras under s3
och fältet region
är valfritt (många objektlager behöver inte ställa in detta fält).
Kör sedan i18n.site -n
för att återpublicera projektet.
Om du har ändrat ~/.config/i18n.site.yml
och vill ladda upp igen, använd följande kommando i projektets rotkatalog för att rensa uppladdningscachen :
rm -rf .i18n/data/seo .i18n/data/public
Cloudflare-Konfiguration
Domännamn värd för cloudflare
Konverteringsregler
Lägg till konverteringsreglerna enligt nedan:
Regelkoden är som följer, vänligen ändra koden "i18n.site" till ditt domännamn:
(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")
)
Cachningsregler
Lägg till cacheregler enligt följande:
(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")
Omdirigeringsregler
Ställ in omdirigeringsreglerna enligt följande, vänligen ändra koden "i18n.site" till ditt domännamn
(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
Välj dynamisk omdirigering, vänligen ändra /en
i omdirigeringsväg concat("/en",http.request.uri.path,".htm")
till standardspråket du vill att sökmotorerna ska inkludera.
Baidu Intelligent Cloud Configuration
Om du behöver tillhandahålla tjänster till Kina kan du använda Baidu Smart Cloud .
Data laddas upp till Baidu Object Storage och binds till Baidu Content Distribution Network.
Skapa sedan skriptet i edge EdgeJS tjänsten enligt följande
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
// Svarsrubriker kan ställas in för att felsöka utdata, såsom out.XXX = 'MSG';
})
Klicka på Debug
och sedan på Publicera till hela nätverket.
Avancerad Användning: Fördela Trafik Baserat På Regional Upplösning
Om du vill tillhandahålla tjänster i Kina och även vill ha cloudflare
gratis internationell trafik kan du använda DNS
med regional upplösning.
Till exempel tillhandahåller Huawei Cloud DNS gratis regional analys, med vilken kinesisk fastlandstrafik kan gå genom Baidu Smart Cloud, och internationell trafik kan gå genom cloudflare
.
Det finns många fallgropar i konfigurationen cloudflare
Här är några punkter att notera :
Domännamnet Är Värd I Andra DNS
, Hur Man Använder cloudflare
Bind först ett godtyckligt domännamn till cloudflare
och använd sedan SSL/TLS
→ anpassat domännamn för att associera huvuddomännamnet till detta domännamn.
cloudflare R2
Kan Inte Nås via Ett Anpassat Domännamn
Eftersom den cloudflare
objektlagringen R2
inte kan nås med ett anpassat domännamn, måste ett objektlagring från tredje part användas för att placera statiska filer.
Här tar vi backblaze.com som ett exempel för att demonstrera hur man binder tredjepartsobjekt som ska lagras vid cloudflare
.
Skapa en hink vid backblaze.com
, ladda upp valfri fil, klicka för att bläddra i filen och få domännamnet Friendly URL
, vilket är f003.backblazeb2.com
här.
Ändra domännamnet från CNAME
till f003.backblazeb2.com
vid cloudflare
och aktivera proxyn.
Ändra cloudflare
av SSL
→ krypteringsläge, inställt på Full
Lägg till konverteringsregeln som visas nedan, sätt den först (den första har lägst prioritet):
Rewrite to
välj dynamiskt och ändra your_bucketname
i concat("/file/your_bucketname",http.request.uri.path)
till ditt hinknamn.
Dessutom, i cloudflare
konverteringsregeln ovan, ändras index.html
till file/your_bucketname/index.html
och andra konfigurationer förblir desamma.