Zoekmachineoptimalisatie (Seo)
Beginsel
i18n.site
gebruikt een niet-vernieuwde architectuur voor één pagina. Om zoekindexering te vergemakkelijken, wordt er een afzonderlijke statische pagina en sitemap.xml
gegenereerd die crawlers kunnen crawlen.
Wanneer User-Agent
van het toegangsverzoek wordt gebruikt door de crawler van de zoekmachine, wordt het verzoek via 302
doorgestuurd naar de statische pagina.
Op statische pagina's gebruikt u link
om links naar verschillende taalversies van deze pagina aan te geven, zoals :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Lokale Nginx-Configuratie
Neem het .i18n/htm/main.yml
configuratiebestand in het demoproject als voorbeeld
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Wijzig eerst de waarde van host:
hierboven in uw domeinnaam, bijvoorbeeld xxx.com
.
Vervolgens wordt, i18n.site -n
, de statische pagina gegenereerd in de map out/main/htm
.
Uiteraard kunt u ook andere configuratiebestanden inschakelen, zoals eerst verwijzen naar de configuratie van main
om .i18n/htm/dist.package.json
en .i18n/htm/dist.yml
aan te maken.
Voer vervolgens i18n.site -n -c dist
uit, zodat de statische pagina wordt gegenereerd naar out/dist/htm
.
nginx
kan worden ingesteld door de onderstaande configuratie te raadplegen.
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;
# Bewaar serverwerkscripts niet te lang in de cache
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Stel langere cachetijden in voor andere statische bronnen
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 in welk statisch bestand de crawler gebruikt als startpagina-item
location = / {
# Als $botLang niet leeg is, betekent dit crawlertoegang en omleiding volgens het ingestelde taalpad
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Applicatieconfiguratie met één pagina
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/;
}
}
Configureer Objectopslag Voor Het Uploaden Van Statische Bestanden
Statische bestanden kunnen lokaal worden gegenereerd, maar een meer gebruikelijke aanpak is om ze naar objectopslag te uploaden.
Wijzig out
in :
out:
- s3
Bewerk vervolgens ~/.config/i18n.site.yml
en voeg de volgende configuratie toe :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
Wijzig in de configuratie i18n.site
in de waarde van host:
in .i18n/htm/main.yml
. Er kunnen meerdere objectopslagplaatsen worden geconfigureerd onder s3
, en het veld region
is optioneel (veel objectopslagplaatsen hoeven dit veld niet in te stellen).
Voer vervolgens i18n.site -n
uit om het project opnieuw te publiceren.
Als je ~/.config/i18n.site.yml
hebt gewijzigd en opnieuw wilt uploaden, gebruik dan de volgende opdracht in de hoofdmap van het project om de uploadcache te wissen :
rm -rf .i18n/data/seo .i18n/data/public
Cloudflare-Configuratie
Domeinnaam gehost op cloudflare
Conversieregels
Voeg de conversieregels toe zoals hieronder weergegeven:
De regelcode is als volgt. Wijzig de code "i18n.site" in uw 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")
)
Regels Voor Cachen
Voeg cacheregels als volgt toe:
(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")
Regels Voor Omleiding
Stel de omleidingsregels als volgt in. Wijzig de code "i18n.site" naar uw 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
Selecteer dynamische omleiding. Wijzig /en
in omleidingspad concat("/en",http.request.uri.path,".htm")
naar de standaardtaal die zoekmachines moeten gebruiken.
Baidu Intelligente Cloudconfiguratie
Als u diensten moet leveren aan het vasteland van China, kunt u Baidu Smart Cloud gebruiken.
Gegevens worden geüpload naar Baidu Object Storage en gebonden aan het Baidu Content Distribution Network.
Maak vervolgens het script in EdgeJS edge service als volgt
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
// Antwoordheaders kunnen worden ingesteld om uitvoer te debuggen, zoals out.XXX = 'MSG';
})
Klik op Debug
en vervolgens op Publiceren naar het gehele netwerk.
Geavanceerd Gebruik: Verdeel Verkeer Op Basis Van Regionale Resolutie
Als u diensten wilt verlenen op het vasteland van China en ook cloudflare
gratis internationaal verkeer wilt, kunt u DNS
met regionale resolutie gebruiken.
Huawei Cloud DNS biedt bijvoorbeeld gratis regionale analyses, waarmee het Chinese verkeer via Baidu Smart Cloud kan gaan, en het internationale verkeer via cloudflare
.
Er zijn veel valkuilen bij de configuratie van cloudflare
Hier zijn een paar aandachtspunten :
De Domeinnaam Wordt Gehost in Andere DNS
, Hoe Te Gebruiken cloudflare
Bind eerst een willekeurige domeinnaam aan cloudflare
en gebruik vervolgens SSL/TLS
→ aangepaste domeinnaam om de hoofddomeinnaam aan deze domeinnaam te koppelen.
cloudflare R2
Is Niet Toegankelijk via Een Aangepaste Domeinnaam
Omdat de cloudflare
objectopslag R2
niet toegankelijk is via een aangepaste domeinnaam, moet een objectopslag van derden worden gebruikt om statische bestanden te plaatsen.
Hier nemen we backblaze.com als voorbeeld om te demonstreren hoe objecten van derden kunnen worden gebonden om op cloudflare
te worden opgeslagen.
Maak een bucket op backblaze.com
, upload een willekeurig bestand, klik om door het bestand te bladeren en verkrijg de domeinnaam Friendly URL
, dat is hier f003.backblazeb2.com
.
Wijzig de domeinnaam van CNAME
naar f003.backblazeb2.com
op cloudflare
en schakel de proxy in.
Wijzig cloudflare
van SSL
→ encryptiemodus, stel in op Full
Voeg de conversieregel toe zoals hieronder weergegeven, zet deze op de eerste plaats (de eerste heeft de laagste prioriteit):
Rewrite to
selecteer dynamisch en wijzig your_bucketname
in concat("/file/your_bucketname",http.request.uri.path)
naar uw bucketnaam.
Bovendien wordt in de bovenstaande cloudflare
conversieregel index.html
gewijzigd in file/your_bucketname/index.html
en blijven andere configuraties hetzelfde.