Suchmaschinenoptimierung (Seo)
Prinzip
i18n.site
verwendet eine Einzelseitenarchitektur ohne Aktualisierung. Um die Suchindizierung zu erleichtern, wird eine separate statische Seite und sitemap.xml
zum Crawlen durch Crawler generiert.
Wenn der Suchmaschinen-Crawler User-Agent
der Zugriffsanforderung verwendet, wird die Anforderung über 302
auf die statische Seite umgeleitet.
Verwenden Sie auf statischen Seiten link
, um Links zu verschiedenen Sprachversionen dieser Seite anzugeben, z. B. :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Lokale Nginx-Konfiguration
Nehmen Sie als Beispiel die .i18n/htm/main.yml
-Konfigurationsdatei im Demoprojekt
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Bitte ändern Sie zunächst den Wert host:
oben in Ihren Domainnamen, z. B. xxx.com
.
Dann wird i18n.site -n
die statische Seite im Verzeichnis out/main/htm
generiert.
Natürlich können Sie auch andere Konfigurationsdateien aktivieren, z. B. zuerst auf die Konfiguration main
verweisen, um .i18n/htm/dist.package.json
und .i18n/htm/dist.yml
zu erstellen.
Führen Sie dann i18n.site -n -c dist
aus, damit die statische Seite auf out/dist/htm
generiert wird.
nginx
kann mithilfe der folgenden Konfiguration eingestellt werden.
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;
# Speichern Sie Server-Worker-Skripte nicht zu lange im Cache
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Legen Sie längere Cache-Zeiten für andere statische Ressourcen fest
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Legen Sie fest, welche statische Datei der Crawler als Homepage-Eintrag verwendet
location = / {
# Wenn $botLang nicht leer ist, bedeutet dies Crawler-Zugriff und Umleitung entsprechend dem eingestellten Sprachpfad
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Konfiguration einer Einzelseitenanwendung
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/;
}
}
Konfigurieren Sie Den Objektspeicher Zum Hochladen Statischer Dateien
Statische Dateien können lokal generiert werden, ein häufigerer Ansatz besteht jedoch darin, sie in den Objektspeicher hochzuladen.
Ändern Sie out
in :
out:
- s3
Bearbeiten Sie dann ~/.config/i18n.site.yml
und fügen Sie die folgende Konfiguration hinzu :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
Bitte ändern Sie in der Konfiguration i18n.site
in den Wert host:
in .i18n/htm/main.yml
Unter s3
können mehrere Objektspeicher konfiguriert werden, und das Feld region
ist optional (viele Objektspeicher müssen dieses Feld nicht festlegen).
Führen Sie dann i18n.site -n
aus, um das Projekt erneut zu veröffentlichen.
Wenn Sie ~/.config/i18n.site.yml
geändert haben und erneut hochladen möchten, verwenden Sie bitte den folgenden Befehl im Projektstammverzeichnis, um den Upload-Cache zu leeren :
rm -rf .i18n/data/seo .i18n/data/public
Cloudflare-Konfiguration
Domainname gehostet bei cloudflare
Konvertierungsregeln
Fügen Sie die Konvertierungsregeln wie unten gezeigt hinzu:
Der Regelcode lautet wie folgt. Bitte ändern Sie den Code „i18n.site“ in Ihren Domainnamen:
(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")
)
Caching-Regeln
Fügen Sie Cache-Regeln wie folgt hinzu:
(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")
Umleitungsregeln
Legen Sie die Umleitungsregeln wie folgt fest. Bitte ändern Sie den Code „i18n.site“ in Ihren Domainnamen
(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
Wählen Sie die dynamische Umleitung. Bitte ändern Sie /en
im Umleitungspfad concat("/en",http.request.uri.path,".htm")
in die Standardsprache, die Suchmaschinen einbeziehen sollen.
Intelligente Baidu-Cloud-Konfiguration
Wenn Sie Dienste für das chinesische Festland bereitstellen müssen, können Sie Baidu Smart Cloud verwenden.
Die Daten werden in den Baidu Object Storage hochgeladen und an das Baidu Content Distribution Network gebunden.
Erstellen Sie dann das Skript im EdgeJS -Dienst wie folgt
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
// Sie können den Antwortheader festlegen, um die Ausgabe zu debuggen, z. B. out.XXX = 'MSG';
})
Klicken Sie auf Debug
und dann auf Im gesamten Netzwerk veröffentlichen.
Erweiterte Verwendung: Verteilen Sie Den Datenverkehr Basierend Auf Der Regionalen Auflösung
Wenn Sie Dienste auf dem chinesischen Festland anbieten und außerdem cloudflare
kostenlosen internationalen Datenverkehr wünschen, können Sie DNS
mit regionaler Auflösung verwenden.
Beispielsweise bietet Huawei DNS eine kostenlose regionale Analyse, mit der der Datenverkehr auf dem chinesischen Festland über die Baidu Smart Cloud und der internationale Datenverkehr über cloudflare
geleitet werden kann.
Die Konfiguration von cloudflare
birgt viele Fallstricke. Hier sind einige Punkte zu beachten :
Der Domänenname Wird in Anderen Gehostet DNS
, Verwendung cloudflare
Binden Sie zunächst einen beliebigen Domänennamen an cloudflare
und verwenden Sie dann SSL/TLS
→ benutzerdefinierter Domänenname, um den Hauptdomänennamen diesem Domänennamen zuzuordnen.
Auf cloudflare R2
Kann Nicht Über Einen Benutzerdefinierten Domänennamen Zugegriffen Werden
Da auf den cloudflare
Objektspeicher R2
nicht über einen benutzerdefinierten Domänennamen zugegriffen werden kann, muss zum Platzieren statischer Dateien ein Objektspeicher eines Drittanbieters verwendet werden.
Hier nehmen wir backblaze.com als Beispiel, um zu demonstrieren, wie man Objekte von Drittanbietern bindet, die bei cloudflare
gespeichert werden sollen.
Erstellen Sie einen Bucket bei backblaze.com
, laden Sie eine beliebige Datei hoch, klicken Sie, um die Datei zu durchsuchen, und rufen Sie den Domänennamen Friendly URL
ab, der hier f003.backblazeb2.com
ist.
Ändern Sie den Domänennamen von CNAME
auf f003.backblazeb2.com
bei cloudflare
und aktivieren Sie den Proxy.
Ändern Sie cloudflare
von SSL
→ Verschlüsselungsmodus, setzen Sie ihn auf Full
Fügen Sie die Konvertierungsregel wie unten gezeigt hinzu und setzen Sie sie an die erste Stelle (die erste hat die niedrigste Priorität):
Rewrite to
Wählen Sie „Dynamisch“ und ändern Sie your_bucketname
in concat("/file/your_bucketname",http.request.uri.path)
in Ihren Bucket-Namen.
Darüber hinaus wird in der obigen cloudflare
Konvertierungsregel index.html
in file/your_bucketname/index.html
geändert und andere Konfigurationen bleiben gleich.