Otsingumootori Optimeerimine (Seo)

Põhimõte

i18n.site võtab kasutusele mittevärskendava ühe lehe arhitektuuri. Otsingu indekseerimise hõlbustamiseks luuakse roomajatele eraldi staatiline leht ja sitemap.xml .

Kui otsingumootori roomaja kasutab juurdepääsupäringu User-Agent , suunatakse päring 302 kaudu staatilisele lehele.

Staatilistel lehtedel kasutage link , et näidata linke selle lehe erinevatele keeleversioonidele, näiteks :

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

Kohalik Nginxi Konfiguratsioon

Võtke näitena demoprojekti konfiguratsioonifail .i18n/htm/main.yml

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

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

cdn:
  v:
  jsd:

Palun muutke esmalt ülaltoodud väärtust host: oma domeeninimeks, näiteks xxx.com .

Seejärel genereeritakse i18n.site -n staatiline leht kataloogis out/main/htm .

Muidugi saate lubada ka muid konfiguratsioonifaile, näiteks viidates esmalt main konfiguratsioonile, et luua .i18n/htm/dist.package.json ja .i18n/htm/dist.yml .

Seejärel käivitage i18n.site -n -c dist nii et staatiline leht genereeritakse out/dist/htm ks.

nginx saab määrata alloleva konfiguratsiooni abil.

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;

# Ärge hoidke serveritöötaja skripte liiga kaua vahemällu
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Seadistage muude staatiliste ressursside jaoks pikemad vahemäluajad
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Määrake, millist staatilist faili roomaja kasutab avalehe kirjena
  location = / {
    # Kui $botLang ei ole tühi, tähendab see roomaja juurdepääsu ja ümbersuunamist vastavalt määratud keeleteele
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Ühe lehe rakenduse konfiguratsioon
  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/;
  }
}

Konfigureerige Objektide Salvestusruum Staatiliste Failide Üleslaadimiseks

Staatilisi faile saab genereerida kohapeal, kuid levinum lähenemisviis on nende üleslaadimine objektide salvestusruumi.

Muutke ülal konfigureeritud out väärtuseks :

out:
  - s3

Seejärel muutke ~/.config/i18n.site.yml ja lisage järgmine konfiguratsioon :

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

Seadistuses muutke i18n.site väärtuseks host: in .i18n/htm/main.yml , s3 all saab konfigureerida mitu objektipoodi ja väli region on valikuline (paljud objektipoed ei pea seda välja määrama).

Seejärel käivitage projekti uuesti avaldamiseks i18n.site -n .

Kui olete muutnud ~/.config/i18n.site.yml ja soovite uuesti üles laadida, kasutage üleslaadimise vahemälu tühjendamiseks projekti juurkataloogis järgmist käsku :

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

Cloudflare'i Konfiguratsioon

Domeeninimi majutatud cloudflare

Konversioonireeglid

Lisage konversioonireeglid, nagu allpool näidatud:

Reegli kood on järgmine, muutke koodi "i18n.site" oma domeeninimeks:

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

Vahemällu Salvestamise Reeglid

Lisage vahemälu reeglid järgmiselt:

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

Ümbersuunamise Reeglid

Määrake ümbersuunamise reeglid järgmiselt, muutke oma domeeninime koodi "i18n.site"

(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 Valige dünaamiline ümbersuunamine, muutke ümbersuunamistee concat("/en",http.request.uri.path,".htm") väärtust /en vaikekeeleks, mille soovite, et otsingumootorid kaasaksid.

Baidu Intelligentne Pilvekonfiguratsioon

Kui teil on vaja Mandri-Hiinale teenuseid pakkuda, saate kasutada Baidu Smart Cloudi .

Andmed laaditakse üles Baidu Object Storage'i ja seotakse Baidu sisujaotusvõrguga.

Seejärel looge skript teenuses EdgeJS

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
  // Saate määrata vastuse päise väljundi silumiseks, näiteks out.XXX = 'MSG';
})

Klõpsake nuppu Debug ja seejärel nuppu Avalda kogu võrgus.

Täpsem Kasutus: Jaotage Liiklust Piirkondliku Eraldusvõime Alusel

Kui soovite osutada teenuseid Mandri-Hiinas ja soovite ka cloudflare tasuta rahvusvahelist liiklust, võite kasutada piirkondliku eraldusvõimega DNS .

Näiteks pakub Huawei DNS tasuta piirkondlikku analüüsi, mille abil saab Mandri-Hiina liiklus läbida Baidu Smart Cloudi ja rahvusvaheline liiklus läbi cloudflare .

cloudflare konfiguratsioonis on palju lõkse. Siin on mõned punktid, mida tasub tähele panna :

Domeeninimi on Hostitud Teises DNS , Kuidas Kasutada cloudflare

Esmalt siduge suvaline domeeninimi väärtusega cloudflare ja seejärel kasutage SSL/TLS → kohandatud domeeninimi, et seostada põhidomeeninimi selle domeeninimega.

cloudflare R2 Ei Pääse Juurde Kohandatud Domeeninime Kaudu

Kuna cloudflare objektisalvestusele R2 ei pääse kohandatud domeeninimega juurde, tuleb staatiliste failide paigutamiseks kasutada kolmanda osapoole objektimälu.

Siin on näide backblaze.com et näidata, kuidas siduda kolmanda osapoole objekte, mis salvestatakse cloudflare .

Looge ämber backblaze.com juures, laadige üles mis tahes fail, klõpsake faili sirvimiseks ja hankige domeeninimi Friendly URL , mis on siin f003.backblazeb2.com .

Muutke domeeninime CNAME -lt f003.backblazeb2.com cloudflare juures ja lubage puhverserver.

SSL cloudflare krüpteerimisrežiim, määra Full

Lisage konversioonireegel, nagu allpool näidatud, asetage see esimeseks (esimesel on madalaim prioriteet):

Rewrite to valige dünaamiline ja muutke your_bucketname concat("/file/your_bucketname",http.request.uri.path) oma ämbri nime.

Lisaks muudetakse ülaltoodud cloudflare teisendusreeglis index.html väärtuseks file/your_bucketname/index.html ja muud konfiguratsioonid jäävad samaks.