Soekenjinoptimalisering (Seo)
Beginsel
i18n.site
neem 'n nie-verfris-enkelbladsy-argitektuur aan Ten einde soekindeksering te vergemaklik, sal 'n aparte statiese bladsy en sitemap.xml
gegenereer word vir kruipers om te deurkruip.
Wanneer User-Agent
van die toegangsversoek deur die soekenjin-kruiper gebruik word, sal die versoek herlei word na die statiese bladsy via 302
.
Op statiese bladsye, gebruik link
om skakels na verskillende taalweergawes van hierdie bladsy aan te dui, soos :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Plaaslike Nginx-Konfigurasie
Neem die .i18n/htm/main.yml
konfigurasielêer in die demo-projek as 'n voorbeeld
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Verander asseblief eers die waarde van host:
hierbo aan jou domeinnaam, soos xxx.com
.
Dan, i18n.site -n
, sal die statiese bladsy in die out/main/htm
gids gegenereer word.
Natuurlik kan jy ook ander konfigurasielêers aktiveer, soos om eers na die konfigurasie van main
te verwys om .i18n/htm/dist.package.json
en .i18n/htm/dist.yml
te skep.
Begin dan i18n.site -n -c dist
sodat die statiese bladsy na out/dist/htm
gegenereer sal word.
nginx
kan gestel word deur na die konfigurasie hieronder te verwys.
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;
# Moenie bedienerwerkerskrifte te lank kas nie
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Stel langer kastye vir ander statiese hulpbronne
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Stel watter statiese lêer die deurkruiser gebruik as die tuisbladinskrywing
location = / {
# As $botLang nie leeg is nie, beteken dit kruipertoegang en herleiding volgens die vasgestelde taalpad
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Enkelbladsy-toepassingkonfigurasie
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/;
}
}
Stel Voorwerpberging Op Vir Die Oplaai Van Statiese Lêers
Statiese lêers kan plaaslik gegenereer word, maar 'n meer algemene benadering is om dit op te laai na objekberging.
Verander out
wat hierbo gekonfigureer is na :
out:
- s3
Wysig dan ~/.config/i18n.site.yml
en voeg die volgende konfigurasie by :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
In die konfigurasie, verander asseblief i18n.site
na die waarde van host:
in .i18n/htm/main.yml
, veelvuldige voorwerpwinkels kan onder s3
gekonfigureer word, en die region
veld is opsioneel (baie voorwerpwinkels hoef nie hierdie veld in te stel nie).
Begin dan i18n.site -n
om die projek te herpubliseer.
As jy ~/.config/i18n.site.yml
gewysig het en weer wil oplaai, gebruik asseblief die volgende opdrag in die projek se wortelgids om die oplaaikas skoon te maak :
rm -rf .i18n/data/seo .i18n/data/public
Cloudflare-Konfigurasie
Domeinnaam gehuisves aan cloudflare
Omskakelingsreëls
Voeg die omskakelingsreëls by soos hieronder getoon:
Die reëlkode is soos volg, verander asseblief die kode "i18n.site" na jou domeinnaam:
(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")
)
Kasreëls
Voeg kasreëls soos volg by:
(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")
Herlei Reëls
Stel die herleidingreëls soos volg, verander asseblief die kode "i18n.site" na jou domeinnaam
(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
Kies dinamiese herleiding, verander asseblief /en
in herleidingspad concat("/en",http.request.uri.path,".htm")
na die verstektaal wat jy wil hê soekenjins moet insluit.
Baidu Intelligente Wolk-Konfigurasie
As jy dienste aan die vasteland van China moet verskaf, kan jy Baidu Smart Cloud gebruik.
Data word opgelaai na Baidu Object Storage en gebind aan Baidu Content Distribution Network.
Skep dan die script in 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
// Antwoordopskrifte kan gestel word om uitvoer te ontfout, soos out.XXX = 'MSG';
})
Klik Debug
, klik dan Publiseer na die hele netwerk.
Gevorderde Gebruik: Versprei Verkeer Gebaseer Op Streeksresolusie
As jy dienste op die vasteland van China wil lewer en ook cloudflare
gratis internasionale verkeer wil hê, kan jy DNS
met streeksresolusie gebruik.
Huawei DNS bied byvoorbeeld gratis streeksanalise, waarmee die Chinese vasteland-verkeer deur Baidu Smart Cloud kan gaan, en internasionale verkeer deur cloudflare
kan gaan.
Daar is baie slaggate in die konfigurasie van cloudflare
Hier is 'n paar punte om op te let :
Die Domeinnaam Word in Ander DNS
Gehuisves, Hoe Om cloudflare
Te Gebruik
Bind eers 'n arbitrêre domeinnaam aan cloudflare
, en gebruik dan SSL/TLS
→ pasgemaakte domeinnaam om die hoofdomeinnaam aan hierdie domeinnaam te assosieer.
cloudflare R2
Kan Nie Verkry Word Deur 'n Pasgemaakte Domeinnaam Nie
Omdat die cloudflare
voorwerpberging R2
nie deur 'n pasgemaakte domeinnaam verkry kan word nie, moet 'n derdeparty-objekberging gebruik word om statiese lêers te plaas.
Hier neem backblaze.com as 'n voorbeeld om te demonstreer hoe om derdeparty-voorwerpe te bind om by cloudflare
gestoor te word.
Skep 'n emmer by backblaze.com
, laai enige lêer op, klik om deur die lêer te blaai, en kry die domeinnaam van Friendly URL
, wat f003.backblazeb2.com
hier is.
Verander die domeinnaam van CNAME
na f003.backblazeb2.com
by cloudflare
en aktiveer die instaanbediener.
Verander cloudflare
van SSL
→ enkripsiemodus, gestel op Full
Voeg die omskakelingsreël by soos hieronder getoon, plaas dit eerste (die eerste een het die laagste prioriteit):
Rewrite to
kies dinamiese en verander your_bucketname
in concat("/file/your_bucketname",http.request.uri.path)
na jou emmernaam.
Daarbenewens, in die cloudflare
omskakelingsreël hierbo, word index.html
na file/your_bucketname/index.html
verander, en ander konfigurasies bly dieselfde.