Serĉilo-Optimumigo (Seo)
Principo
i18n.site
adoptas ne-refreŝigan unupaĝan arkitekturon Por faciligi serĉindeksadon, aparta statika paĝo kaj sitemap.xml
estos generitaj por rampi.
Kiam User-Agent
de la alirpeto estas uzata de la serĉilo-crawler, la peto estos redirektita al la statika paĝo per 302
.
Sur senmovaj paĝoj, uzu link
por indiki ligilojn al malsamaj lingvaj versioj de ĉi tiu paĝo, kiel :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Loka Nginx-Agordo
Prenu la agordan dosieron .i18n/htm/main.yml
en la demo-projekto kiel ekzemplon
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Bonvolu unue modifi la valoron de host:
supre al via domajna nomo, kiel xxx.com
.
Tiam, i18n.site -n
, la statika paĝo estos generita en la out/main/htm
dosierujo.
Kompreneble, vi ankaŭ povas ebligi aliajn agordajn dosierojn, kiel unue rilati al la agordo de main
por krei .i18n/htm/dist.package.json
kaj .i18n/htm/dist.yml
.
Tiam rulu i18n.site -n -c dist
por ke la statika paĝo estos generita al out/dist/htm
.
nginx
povas esti agordita per referenco al la agordo sube.
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;
# Ne konservu la skriptojn de serviloj por tro longe
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Agordu pli longajn kaŝmemortempojn por aliaj senmovaj rimedoj
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Fiksu kiun senmovan dosieron la rampilo uzas kiel la hejmpaĝon
location = / {
# Se $botLang ne estas malplena, tio signifas aliron kaj alidirektilon laŭ la fiksita lingvovojo
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Unupaĝa aplika agordo
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/;
}
}
Agordu Objektan Stokadon Por Alŝuti Senmovajn Dosierojn
Senmovaj dosieroj povas esti generitaj loke, sed pli ofta aliro estas alŝuti ilin al objektostokado.
Modifi out
agorditan supre al :
out:
- s3
Poste, redaktu ~/.config/i18n.site.yml
kaj aldonu la sekvan agordon :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
En la agordo, bonvolu ŝanĝi i18n.site
al la valoro de host:
en .i18n/htm/main.yml
, pluraj objektobutikoj povas esti agorditaj sub s3
, kaj la region
kampo estas laŭvola (multaj objektobutikoj ne bezonas agordi ĉi tiun kampon).
Tiam rulu i18n.site -n
por reeldoni la projekton.
Se vi modifis ~/.config/i18n.site.yml
kaj volas re-alŝuti, bonvolu uzi la jenan komandon en la projekta radika dosierujo por forigi la alŝutan kaŝmemoron :
rm -rf .i18n/data/seo .i18n/data/public
Agordo De cloudflare
Domajna nomo gastigita al cloudflare
Reguloj De Konvertiĝo
Aldonu la konvertajn regulojn kiel montrite sube:
La regulkodo estas kiel sekvas, bonvolu modifi la kodon "i18n.site" al via domajna nomo:
(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")
)
Konservado De Reguloj
Aldonu kaŝmemorregulojn jene:
(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")
Redirektaj Reguloj
Agordu la alidirektajn regulojn jene, bonvolu modifi la kodon "i18n.site" al via domajna nomo
(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
Elektu dinamikan alidirekton, bonvolu modifi /en
en alidirekta vojo concat("/en",http.request.uri.path,".htm")
al la defaŭlta lingvo, kiun vi volas, ke serĉiloj inkludu.
Baidu Inteligenta Nuba Agordo
Se vi bezonas provizi servojn al kontinenta Ĉinio, vi povas uzi Baidu Smart Cloud .
Datumoj estas alŝutitaj al Baidu Object Storage kaj ligitaj al Baidu Content Distribution Network.
Poste kreu la skripton en edge EdgeJS servo jene
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
// Vi povas agordi la respondan kaplinion por sencimigi la eligon, kiel ekstere.XXX = 'MSG';
})
Alklaku Debug
, tiam alklaku Publiki al la tuta reto.
Altnivela Uzado: Distribuu Trafikon Laŭ Regiona Rezolucio
Se vi volas provizi servojn en kontinenta Ĉinio kaj ankaŭ volas cloudflare
senpagan internacian trafikon, vi povas uzi DNS
kun regiona rezolucio.
Ekzemple, Huawei Cloud DNS provizas senpagan regionan analizon, per kiu kontinenta ĉina trafiko povas trairi Baidu Smart Cloud, kaj internacia trafiko povas trairi cloudflare
.
Estas multaj malfacilaĵoj en la agordo de cloudflare
Jen kelkaj punktoj por noti :
La Domajna Nomo Estas Gastigita en Alia DNS
, Kiel Uzi cloudflare
Unue ligu arbitran domajnan nomon al cloudflare
, kaj poste uzu SSL/TLS
→ kutiman domajnan nomon por asocii la ĉefan domajnan nomon al ĉi tiu domajna nomo.
cloudflare R2
Ne Alireblas Per Kutima Domajna Nomo
Ĉar la cloudflare
objektostokado R2
ne estas alirebla per personigita domajna nomo, triaparta objektostokado devas esti uzata por meti senmovajn dosierojn.
Ĉi backblaze.com ni prenas kiel ekzemplon por montri kiel ligi triajn objektojn por esti stokitaj ĉe cloudflare
.
Kreu sitelon ĉe backblaze.com
, alŝutu ajnan dosieron, alklaku por foliumi la dosieron kaj ricevu la domajnan nomon de Friendly URL
, kiu estas f003.backblazeb2.com
ĉi tie.
Ŝanĝu la domajnan nomon de CNAME
al f003.backblazeb2.com
ĉe cloudflare
kaj ebligu la prokurilon.
Modifi cloudflare
el SSL
→ ĉifrareĝimo, agordu al Full
Aldonu la konvertan regulon kiel montrite sube, metu ĝin unue (la unua havas la plej malaltan prioritaton):
Rewrite to
elektu dinamikan kaj modifi your_bucketname
en concat("/file/your_bucketname",http.request.uri.path)
al via sitelo-nomo.
Krome, en la cloudflare
konverta regulo supre, index.html
estas ŝanĝita al file/your_bucketname/index.html
, kaj aliaj agordoj restas la samaj.