Optimizare Pentru Motoarele De Căutare (Seo)

Principiu

i18n.site adoptă o arhitectură de o singură pagină fără reîmprospătare Pentru a facilita indexarea căutării, vor fi generate o pagină statică separată și sitemap.xml pentru crawler-uri.

Când User-Agent al cererii de acces este folosit de crawler-ul motorului de căutare, cererea va fi redirecționată către pagina statică prin 302 .

În paginile statice, utilizați link pentru a indica link-uri către versiuni în diferite limbi ale acestei pagini, cum ar fi :

<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">

Configurație Locală nginx

Luați ca exemplu fișierul de configurare .i18n/htm/main.yml din proiectul demo

host: i18n-demo.github.io
seo: true
out:
  - fs

pkg:
  i: i18n.site
  md: i18n.site

cdn:
  v:
  jsd:

Mai întâi modificați valoarea host: de mai sus la numele dvs. de domeniu, cum ar fi xxx.com .

Apoi, i18n.site -n , pagina statică va fi generată în directorul out/main/htm .

Desigur, puteți activa și alte fișiere de configurare, cum ar fi prima referire la configurația lui main pentru a crea .i18n/htm/dist.package.json și .i18n/htm/dist.yml .

Apoi rulați i18n.site -n -c dist astfel încât pagina statică să fie generată la out/dist/htm .

nginx poate fi setat prin referire la configurația de mai jos.

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;

# Nu păstrați în cache scripturile de lucru pentru server prea mult timp
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Setați timpi de cache mai lungi pentru alte resurse statice
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Setați ce fișier static îl folosește crawler-ul ca intrare în pagina de pornire
  location = / {
    # Dacă $botLang nu este gol, înseamnă acces la crawler și redirecționare în funcție de calea de limbă setată
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Configurarea aplicației cu o singură pagină
  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/;
  }
}

Configurați Stocarea Obiectelor Pentru Încărcarea Fișierelor Statice

Fișierele statice pot fi generate local, dar o abordare mai comună este să le încărcați în stocarea obiectelor.

Modificați out configurat mai sus la :

out:
  - s3

Apoi, editați ~/.config/i18n.site.yml și adăugați următoarea configurație :

site:
  i18n.site:
    s3:
      - endpoint: s3.eu-central-003.backblazeb2.com
        ak: # access key
        sk: # secret key
        bucket: # bucket name
        # region:

În configurație, vă rugăm să schimbați i18n.site la valoarea de host: în .i18n/htm/main.yml , mai multe depozite de obiecte pot fi configurate sub s3 , iar câmpul region este opțional (multe magazine de obiecte nu trebuie să seteze acest câmp).

Apoi rulați i18n.site -n pentru a republica proiectul.

Dacă ați modificat ~/.config/i18n.site.yml și doriți să reîncărcați, vă rugăm să utilizați următoarea comandă din directorul rădăcină al proiectului pentru a șterge memoria cache de încărcare :

rm -rf .i18n/data/seo .i18n/data/public

Configurația cloudflare

Nume de domeniu găzduit cloudflare

Reguli De Conversie

Adăugați regulile de conversie după cum se arată mai jos:

Codul regulii este următorul, vă rugăm să modificați codul „i18n.site” la numele domeniului dumneavoastră:

(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")
)

Regulile De Stocare În Cache

Adăugați reguli de cache după cum urmează:

(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")

Reguli De Redirecționare

Setați regulile de redirecționare după cum urmează, vă rugăm să modificați codul „i18n.site” la numele domeniului dumneavoastră

(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 Selectați redirecționare dinamică, modificați /en în calea de redirecționare concat("/en",http.request.uri.path,".htm") la limba implicită pe care doriți să o includă motoarele de căutare.

Baidu Intelligent Cloud Configuration

Dacă trebuie să oferiți servicii Chinei continentale, puteți utiliza Baidu Smart Cloud .

Datele sunt încărcate în Baidu Object Storage și legate la Baidu Content Distribution Network.

Apoi creați scriptul în serviciul EdgeJS după cum urmează

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
  // Puteți seta antetul răspunsului pentru a depana ieșirea, cum ar fi out.XXX = 'MSG';
})

Faceți clic pe Debug , apoi faceți clic pe Publicare în întreaga rețea.

Utilizare Avansată: Distribuiți Traficul Pe Baza Rezoluției Regionale

Dacă doriți să furnizați servicii în China continentală și doriți, de asemenea, cloudflare trafic internațional gratuit, puteți utiliza DNS cu rezoluție regională.

De exemplu, Huawei Cloud DNS oferă analize regionale gratuite, cu care traficul din China continentală poate trece prin Baidu Smart Cloud, iar traficul internațional poate trece prin cloudflare .

Există multe capcane în configurația lui cloudflare Iată câteva puncte de reținut :

Numele De Domeniu Este Găzduit În Alte DNS , Cum Se Utilizează cloudflare

Mai întâi legați un nume de domeniu arbitrar la cloudflare , apoi utilizați SSL/TLS → nume de domeniu personalizat pentru a asocia numele de domeniu principal cu acest nume de domeniu.

cloudflare R2 Nu Poate Fi Accesat Printr-Un Nume De Domeniu Personalizat

Deoarece stocarea de obiecte cloudflare R2 nu poate fi accesată printr-un nume de domeniu personalizat, trebuie utilizată o stocare de obiecte terță parte pentru a plasa fișiere statice.

backblaze.com luăm ca exemplu pentru a demonstra cum să legăm obiectele terțe pentru a fi stocate la cloudflare .

Creați o găleată la backblaze.com , încărcați orice fișier, faceți clic pentru a răsfoi fișierul și obțineți numele de domeniu Friendly URL , care este f003.backblazeb2.com aici.

Schimbați numele de domeniu de la CNAME la f003.backblazeb2.com la cloudflare și activați proxy-ul.

Modificați cloudflare din SSL → modul de criptare, setat la Full

Adăugați regula de conversie așa cum se arată mai jos, puneți-o pe primul loc (prima are cea mai mică prioritate):

Rewrite to selectați dinamic și modificați your_bucketname în concat("/file/your_bucketname",http.request.uri.path) la numele găleții dvs.

În plus, în regula de conversie cloudflare de mai sus, index.html este schimbat în file/your_bucketname/index.html , iar celelalte configurații rămân aceleași.