Optimisation Des Moteurs De Recherche (Seo)
Principe
i18n.site
adopte une architecture de page unique sans actualisation Afin de faciliter l'indexation de la recherche, une page statique distincte et sitemap.xml
seront générées pour que les robots puissent les explorer.
Lorsque User-Agent
de la demande d'accès est utilisé par le robot du moteur de recherche, la demande sera redirigée vers la page statique via 302
.
Sur les pages statiques, utilisez link
pour indiquer des liens vers différentes versions linguistiques de cette page, telles que :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Configuration Locale De nginx
Prenons l'exemple du fichier de configuration .i18n/htm/main.yml
dans le projet de démonstration
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Veuillez d'abord modifier la valeur host:
ci-dessus pour votre nom de domaine, par exemple xxx.com
.
Ensuite, i18n.site -n
, la page statique sera générée dans le répertoire out/main/htm
.
Bien entendu, vous pouvez également activer d'autres fichiers de configuration, par exemple en vous référant d'abord à la configuration de main
pour créer .i18n/htm/dist.package.json
et .i18n/htm/dist.yml
.
Exécutez ensuite i18n.site -n -c dist
pour que la page statique soit générée sur out/dist/htm
.
nginx
peut être défini en se référant à la configuration ci-dessous.
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 mettez pas en cache les scripts de travail du serveur trop longtemps
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Définir des temps de cache plus longs pour d'autres ressources statiques
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Définir le fichier statique que le robot utilise comme entrée de page d'accueil
location = / {
# Si $botLang n'est pas vide, cela signifie l'accès et la redirection du robot selon le chemin de langue défini.
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Configuration de l'application sur une seule page
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/;
}
}
Configurer Le Stockage D'objets Pour Télécharger Des Fichiers Statiques
Les fichiers statiques peuvent être générés localement, mais une approche plus courante consiste à les télécharger vers le stockage objet.
Modifiez out
configuré ci-dessus en :
out:
- s3
Ensuite, éditez ~/.config/i18n.site.yml
et ajoutez la configuration suivante :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
Dans la configuration, veuillez remplacer i18n.site
par la valeur host:
in .i18n/htm/main.yml
, plusieurs magasins d'objets peuvent être configurés sous s3
et le champ region
est facultatif (de nombreux magasins d'objets n'ont pas besoin de définir ce champ).
Exécutez ensuite i18n.site -n
pour republier le projet.
Si vous avez modifié ~/.config/i18n.site.yml
et souhaitez télécharger à nouveau, veuillez utiliser la commande suivante dans le répertoire racine du projet pour vider le cache de téléchargement :
rm -rf .i18n/data/seo .i18n/data/public
Configuration cloudflare
Nom de domaine hébergé sur cloudflare
Règles De Conversion
Ajoutez les règles de conversion comme indiqué ci-dessous :
Le code de la règle est le suivant, merci de modifier le code "i18n.site" par votre nom de domaine :
(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")
)
Règles De Mise en Cache
Ajoutez des règles de cache comme suit :
(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")
Règles De Redirection
Définissez les règles de redirection comme suit, veuillez modifier le code "i18n.site" en votre nom de domaine
(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
Sélectionnez la redirection dynamique, veuillez modifier /en
dans le chemin de redirection concat("/en",http.request.uri.path,".htm")
vers la langue par défaut que vous souhaitez que les moteurs de recherche incluent.
Configuration Du Cloud Intelligent Baidu
Si vous devez fournir des services à la Chine continentale, vous pouvez utiliser Baidu Smart Cloud .
Les données sont téléchargées sur Baidu Object Storage et liées au Baidu Content Distribution Network.
Créez ensuite le script dans EdgeJS service Edge comme suit
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
// Les en-têtes de réponse peuvent être définis pour déboguer la sortie, telle que out.XXX = 'MSG' ;
})
Cliquez sur Debug
, puis cliquez sur Publier sur l'ensemble du réseau.
Utilisation Avancée : Distribuez Le Trafic en Fonction De La Résolution Régionale
Si vous souhaitez fournir des services en Chine continentale et souhaitez également un trafic international gratuit cloudflare
, vous pouvez en utiliser DNS
avec une résolution régionale.
Par exemple, Huawei Cloud DNS fournit une analyse régionale gratuite, avec laquelle le trafic de la Chine continentale peut passer par Baidu Smart Cloud et le trafic international peut passer par cloudflare
.
Les pièges de la configuration cloudflare
sont nombreux. Voici quelques points à noter :
Le Nom De Domaine Est Hébergé Dans Un Autre DNS
, Comment L'utiliser cloudflare
Liez d'abord un nom de domaine arbitraire à cloudflare
, puis utilisez SSL/TLS
→ nom de domaine personnalisé pour associer le nom de domaine principal à ce nom de domaine.
cloudflare R2
N'est Pas Accessible via Un Nom De Domaine Personnalisé
Étant donné que le stockage d'objets cloudflare
R2
n'est pas accessible par un nom de domaine personnalisé, un stockage d'objets tiers doit être utilisé pour placer les fichiers statiques.
Ici, nous prenons backblaze.com comme exemple pour montrer comment lier des objets tiers à stocker à cloudflare
.
Créez un compartiment à backblaze.com
, téléchargez n'importe quel fichier, cliquez pour parcourir le fichier et obtenez le nom de domaine de Friendly URL
, qui est f003.backblazeb2.com
ici.
Changez le nom de domaine de CNAME
à f003.backblazeb2.com
à cloudflare
et activez le proxy.
Modifier cloudflare
sur SSL
→ mode de cryptage, défini sur Full
Ajoutez la règle de conversion comme indiqué ci-dessous, placez-la en premier (la première a la priorité la plus basse) :
Rewrite to
sélectionnez dynamique et modifiez your_bucketname
en concat("/file/your_bucketname",http.request.uri.path)
en nom de votre bucket.
De plus, dans la règle de conversion cloudflare
ci-dessus, index.html
est remplacé par file/your_bucketname/index.html
et les autres configurations restent les mêmes.