Optimizacija Iskalnikov (Seo)

Načelo

i18n.site sprejme arhitekturo ene strani brez osveževanja, da se olajša indeksiranje iskanja, bosta pajkom ustvarjena ločena statična stran in sitemap.xml .

Ko pajek iskalnika uporabi User-Agent zahteve za dostop, bo zahteva preusmerjena na statično stran prek 302 .

Na statičnih straneh uporabite link da označite povezave do različnih jezikovnih različic te strani, kot je :

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

Lokalna Konfiguracija nginx

Kot primer vzemite konfiguracijsko datoteko .i18n/htm/main.yml v predstavitvenem projektu

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

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

cdn:
  v:
  jsd:

Najprej spremenite zgornjo vrednost host: za ime vaše domene, na primer xxx.com .

Nato bo i18n.site -n generirana statična stran v imeniku out/main/htm .

Seveda lahko omogočite tudi druge konfiguracijske datoteke, na primer, da se najprej sklicujete na konfiguracijo main , da ustvarite .i18n/htm/dist.package.json in .i18n/htm/dist.yml .

Nato zaženite i18n.site -n -c dist , da bo statična stran ustvarjena na out/dist/htm .

nginx lahko nastavite tako, da upoštevate spodnjo konfiguracijo.

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;

# Skriptov strežniških delavcev ne shranjujte predolgo v predpomnilnik
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Nastavite daljši čas predpomnilnika za druge statične vire
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Nastavite, katero statično datoteko pajek uporablja kot vnos domače strani
  location = / {
    # Če $botLang ni prazno, pomeni dostop pajka in preusmeritev glede na nastavljeno jezikovno pot
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Konfiguracija enostranske aplikacije
  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 Shranjevanje Predmetov Za Nalaganje Statičnih Datotek

Statične datoteke je mogoče ustvariti lokalno, vendar je pogostejši pristop, da jih naložite v shrambo objektov.

Spremenite zgoraj konfigurirano out v :

out:
  - s3

Nato uredite ~/.config/i18n.site.yml in dodajte naslednjo konfiguracijo :

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

V konfiguraciji spremenite i18n.site na vrednost host: v .i18n/htm/main.yml , več shramb objektov je mogoče konfigurirati pod s3 , polje region pa ni obvezno (mnogim shrambam objektov tega polja ni treba nastaviti).

Nato zaženite i18n.site -n da ponovno objavite projekt.

Če ste spremenili ~/.config/i18n.site.yml in želite znova naložiti, uporabite naslednji ukaz v korenskem imeniku projekta, da počistite predpomnilnik nalaganja :

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

Konfiguracija cloudflare

Ime domene gosti cloudflare

Pravila Pretvorbe

Dodajte pravila pretvorbe, kot je prikazano spodaj:

Koda pravila je naslednja, spremenite kodo "i18n.site" v ime 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 Predpomnjenja

Pravila predpomnilnika dodajte na naslednji 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 Preusmeritve

Nastavite pravila preusmeritve, kot sledi, spremenite kodo "i18n.site" v ime 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 Izberite dinamično preusmeritev, spremenite /en v preusmeritveni poti concat("/en",http.request.uri.path,".htm") na privzeti jezik, ki ga želite vključiti v iskalnike.

Konfiguracija Inteligentnega Oblaka Baidu

Če morate zagotavljati storitve celinski Kitajski, lahko uporabite Baidu Smart Cloud .

Podatki se naložijo v Baidu Object Storage in povežejo z Baidu Content Distribution Network.

Nato ustvarite skript v storitvi EdgeJS edge , kot sledi

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
  // Glavo odgovora lahko nastavite za odpravljanje napak v izhodu, na primer out.XXX = 'MSG';
})

Kliknite Debug in nato Objavi v celotnem omrežju.

Napredna Uporaba: Porazdelite Promet Na Podlagi Regionalne Ločljivosti

Če želite zagotavljati storitve v celinski Kitajski in želite tudi cloudflare brezplačnega mednarodnega prometa, lahko uporabite DNS z regionalno ločljivostjo.

Na primer, Huawei Cloud DNS zagotavlja brezplačno regionalno analizo, s katero lahko celinski kitajski promet poteka skozi Baidu Smart Cloud, mednarodni promet pa lahko poteka skozi cloudflare .

V konfiguraciji cloudflare je veliko pasti. Tukaj je nekaj točk, ki jih je treba upoštevati :

Ime Domene Gostuje v Drugem DNS , Kako Uporabljati cloudflare

Najprej povežite poljubno ime domene z cloudflare in nato uporabite SSL/TLS → ime domene po meri, da glavno ime domene povežete s tem imenom domene.

cloudflare R2 Ni Mogoče Dostopati Prek Imena Domene Po Meri

Ker do cloudflare pomnilnika objektov R2 ni mogoče dostopati s prilagojenim imenom domene, je treba za namestitev statičnih datotek uporabiti pomnilnik objektov tretje osebe.

backblaze.com vzamemo primer, da pokažemo, kako povezati objekte tretjih oseb, ki bodo shranjeni na cloudflare .

Ustvarite vedro pri backblaze.com , naložite katero koli datoteko, kliknite za brskanje po datoteki in pridobite ime domene Friendly URL , ki je tukaj f003.backblazeb2.com .

Spremenite ime domene iz CNAME v f003.backblazeb2.com pri cloudflare in omogočite proxy.

Spremeni cloudflare od SSL → način šifriranja, nastavljen na Full

Dodajte pravilo pretvorbe, kot je prikazano spodaj, postavite ga na prvo mesto (prvo ima najnižjo prednost):

Rewrite to izberite dinamično in spremenite your_bucketname v concat("/file/your_bucketname",http.request.uri.path) v ime vašega vedra.

Poleg tega se v zgornjem pravilu pretvorbe cloudflare index.html spremeni v file/your_bucketname/index.html , druge konfiguracije pa ostanejo enake.