Optimizacija Za Tražilice (Seo)
Načelo
i18n.site
usvaja arhitekturu jedne stranice bez osvježavanja kako bi se olakšalo indeksiranje pretraživanja, generirat će se zasebna statična stranica i sitemap.xml
koju će indeksirati.
Kada alat za indeksiranje tražilice koristi User-Agent
zahtjeva za pristup, zahtjev će biti preusmjeren na statičnu stranicu putem 302
.
Na statičnim stranicama koristite link
za označavanje poveznica na različite jezične verzije ove stranice, kao što je :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Lokalna nginx Konfiguracija
Uzmimo konfiguracijsku datoteku .i18n/htm/main.yml
u demo projektu kao primjer
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Prvo promijenite gornju vrijednost host:
za naziv svoje domene, kao što je xxx.com
.
Zatim, i18n.site -n
, statična stranica će biti generirana u out/main/htm
direktoriju.
Naravno, također možete omogućiti druge konfiguracijske datoteke, kao što je prvo pozivanje na konfiguraciju main
za stvaranje .i18n/htm/dist.package.json
i .i18n/htm/dist.yml
.
Zatim pokrenite i18n.site -n -c dist
tako da se statična stranica generira na out/dist/htm
.
nginx
se može postaviti prema donjoj konfiguraciji.
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 spremajte radničke skripte poslužitelja predugo u predmemoriju
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Postavite duža vremena predmemorije za druge statičke resurse
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Postavite koju statičku datoteku alat za indeksiranje koristi kao unos početne stranice
location = / {
# Ako $botLang nije prazno, to znači pristup indeksiranja i preusmjeravanje prema postavljenoj jezičnoj stazi
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Konfiguracija aplikacije na jednoj stranici
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/;
}
}
Konfigurirajte Pohranu Objekata Za Učitavanje Statičkih Datoteka
Statičke datoteke mogu se generirati lokalno, ali uobičajeniji pristup je njihovo učitavanje u pohranu objekata.
Izmijenite gore konfiguriranu out
u :
out:
- s3
Zatim uredite ~/.config/i18n.site.yml
i dodajte sljedeću konfiguraciju :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
U konfiguraciji promijenite i18n.site
u vrijednost host:
u .i18n/htm/main.yml
, višestruke pohrane objekata mogu se konfigurirati pod s3
, a polje region
nije obavezno (mnoge pohrane objekata ne moraju postavljati ovo polje).
Zatim pokrenite i18n.site -n
da ponovno objavite projekt.
Ako ste izmijenili ~/.config/i18n.site.yml
i želite ponovno učitati, upotrijebite sljedeću naredbu u korijenskom direktoriju projekta za brisanje predmemorije prijenosa :
rm -rf .i18n/data/seo .i18n/data/public
cloudflare Konfiguracija
Naziv domene hostiran na cloudflare
Pravila Pretvorbe
Dodajte pravila konverzije kao što je prikazano u nastavku:
Kôd pravila je sljedeći, molimo promijenite kod "i18n.site" u naziv svoje domene:
(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")
)
Pravila Predmemoriranja
Dodajte pravila predmemorije na sljedeći način:
(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")
Pravila Preusmjeravanja
Postavite pravila preusmjeravanja na sljedeći način, molimo promijenite kod "i18n.site" na naziv svoje domene
(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
Odaberite dinamičko preusmjeravanje, promijenite /en
u stazi preusmjeravanja concat("/en",http.request.uri.path,".htm")
na zadani jezik koji želite da tražilice uključe.
Baidu Intelligent Cloud Configuration
Ako trebate pružati usluge kontinentalnoj Kini, možete koristiti Baidu Smart Cloud .
Podaci se učitavaju u Baidu Object Storage i povezuju s Baidu Content Distribution Network.
Zatim izradite skriptu u EdgeJS edge usluzi na sljedeći način
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
// Zaglavlja odgovora mogu se postaviti za ispravljanje pogrešaka, kao što je out.XXX = 'MSG';
})
Kliknite Debug
, zatim kliknite Objavi na cijeloj mreži.
Napredna Upotreba: Distribuirajte Promet Na Temelju Regionalne Rezolucije
Ako želite pružati usluge u kontinentalnoj Kini i također želite cloudflare
besplatnog međunarodnog prometa, možete koristiti DNS
s regionalnom rezolucijom.
Na primjer, Huawei Cloud DNS pruža besplatnu regionalnu analizu, s kojom promet kontinentalne Kine može ići kroz Baidu Smart Cloud, a međunarodni promet može ići kroz cloudflare
.
Mnogo je zamki u konfiguraciji cloudflare
Evo nekoliko točaka koje treba primijetiti :
Naziv Domene Nalazi Se U Drugom DNS
, Kako Koristiti cloudflare
Prvo povežite proizvoljan naziv domene s cloudflare
, a zatim upotrijebite SSL/TLS
→ prilagođeni naziv domene da povežete glavni naziv domene s ovim nazivom domene.
cloudflare R2
Se Ne Može Pristupiti Putem Prilagođenog Naziva Domene
Budući da se cloudflare
pohrani objekata R2
ne može pristupiti pomoću prilagođenog naziva domene, potrebno je koristiti pohranu objekata treće strane za smještaj statičkih datoteka.
Ovdje ćemo uzeti backblaze.com primjer da pokažemo kako objekte treće strane pohraniti na cloudflare
.
Stvorite kantu na backblaze.com
, prenesite bilo koju datoteku, kliknite za pregledavanje datoteke i dohvatite naziv domene Friendly URL
, što je ovdje f003.backblazeb2.com
.
Promijenite naziv domene s CNAME
na f003.backblazeb2.com
na cloudflare
i omogućite proxy.
Izmijenite cloudflare
od SSL
→ način šifriranja, postavite na Full
Dodajte pravilo konverzije kao što je prikazano u nastavku, stavite ga na prvo mjesto (prvo ima najniži prioritet):
Rewrite to
odaberite dinamički i promijenite your_bucketname
u concat("/file/your_bucketname",http.request.uri.path)
u naziv svoje kante.
Osim toga, u gornjem pravilu pretvorbe cloudflare
, index.html
se mijenja u file/your_bucketname/index.html
, a ostale konfiguracije ostaju iste.