Gözleg Motory Optimizasiýasy (Seo)

Ýörelgesi

i18n.site täzelenmeýän bir sahypa arhitekturasyny kabul edýär Gözleg indeksini aňsatlaşdyrmak üçin, gözlegçiler üçin aýratyn statiki sahypa we sitemap.xml dörediler.

Giriş haýyşynyň User-Agent gözleg motorynyň gözlegçisi tarapyndan ulanylanda, haýyş 302 üsti bilen statiki sahypa ugrukdyrylar.

Statik sahypalarda, bu sahypanyň dürli dil wersiýalaryna baglanyşyklary görkezmek üçin link ulanyň :

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

Nerli nginx Konfigurasiýasy

Mysal hökmünde demo taslamasyndaky .i18n/htm/main.yml konfigurasiýa faýly alyň

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

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

cdn:
  v:
  jsd:

Ilki bilen ýokardaky host: bahasyny xxx.com ýaly domen adyňyza üýtgediň.

Soň i18n.site -n , out/main/htm katalogda statiki sahypa dörediler.

Elbetde, beýleki konfigurasiýa faýllaryny hem işledip bilersiňiz, meselem .i18n/htm/dist.package.json we .i18n/htm/dist.yml döretmek üçin ilki bilen main konfigurasiýasyna ýüzlenmek.

Soňra statiki sahypa out/dist/htm -e öwrüler ýaly i18n.site -n -c dist işlediň.

nginx aşakdaky konfigurasiýa salgylanyp kesgitlenip bilner.

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;

# Serwer işgäri skriptlerini gaty uzak saklamaň
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Beýleki statiki çeşmeler üçin has uzyn keş wagtyny düzüň
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Gözlegçiniň baş sahypanyň ýazgysy hökmünde haýsy statiki faýly ulanýandygyny düzüň
  location = / {
    # Eger boş däl bolsa, kesgitlenen dil ýoluna görä gözlegçilere giriş we gönükdirme diýmekdir $botLang
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Pageeke sahypa programma konfigurasiýasy
  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/;
  }
}

Statik Faýllary Ýüklemek Üçin Obýekt Saklanyşyny Sazlaň

Statik faýllar ýerli görnüşde döredilip bilner, ýöne has giňden ýaýran çemeleşme, olary obýekt ammaryna ýüklemekdir.

Aboveokardaky düzülen out a üýtgediň :

out:
  - s3

Soň bolsa ~/.config/i18n.site.yml redaktirläň we aşakdaky konfigurasiýany goşuň :

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

Sazlamada i18n.site .i18n/htm/main.yml -den host: -e üýtgediň, köp obýekt dükany s3 den aşakda düzülip bilner we region meýdan islege bagly däl (köp obýekt dükanlary bu meýdany bellemeli däl).

Soňra taslamany neşir etmek üçin i18n.site -n işlediň.

~/.config/i18n.site.yml üýtgeden bolsaňyz we täzeden ýüklemek isleseňiz, ýük keşini arassalamak üçin taslama kök katalogynda aşakdaky buýrugy ulanyň :

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

“Bulut” Konfigurasiýasy

cloudflare ady

Öwürmek Düzgünleri

Aşakda görkezilişi ýaly öwrüliş düzgünlerini goşuň:

Düzgün kody aşakdaky ýaly, "i18n.site" koduny domen adyňyza üýtgediň:

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

Keş Keş Düzgünleri

Keş düzgünlerini aşakdaky ýaly goşuň:

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

Düzgünleri Gönükdiriň

Gaýtadan gönükdirme düzgünlerini aşakdaky ýaly düzüň, "i18n.site" koduny domen adyňyza üýtgediň

(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 Dinamiki gönükdirmäni saýlaň, gözleg motorlarynyň goşmak isleýän esasy diline concat("/en",http.request.uri.path,".htm") gönükdirme ýolunda /en üýtgediň.

Baidu Akylly Bulut Konfigurasiýasy

Hytaýyň materigine hyzmatlar bermeli bolsaňyz, “Baidu Smart Cloud” -y ulanyp bilersiňiz.

Maglumatlar Baidu obýekt ammaryna ýüklenýär we Baidu mazmuny paýlaýyş toruna baglanýar.

Soňra ssenariýany aşakdaky ýaly dörediň 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
  // Out.XXX = 'MSG' ýaly çykyşy düzetmek üçin jogap sözbaşysyny düzüp bilersiňiz;
})

Debug basyň, soňra bolsa tutuş tora çap etmek düwmesine basyň.

Giňişleýin Ulanylyşy: Sebitleýin Çözgüt Esasynda Traffigi Paýlaň

Hytaýyň materiginde hyzmatlar bermek isleseňiz we cloudflare mugt halkara traffigi isleseňiz, sebitleýin çözgüt bilen DNS ulanyp bilersiňiz.

Mysal üçin, “Huawei Cloud DNS mugt sebitleýin derňewi üpjün edýär, bu ugurda Hytaýyň içerki ulaglary “Baidu Smart Cloud” -dan geçip biler we halkara traffigi cloudflare dan geçip biler.

cloudflare konfigurasiýasynda köp ýalňyşlyklar bar. Ine, bellemeli birnäçe nokat :

Domen Ady Beýleki DNS -Da Ýerleşýär, cloudflare Nädip Ulanmaly

Ilki bilen özbaşdak domen adyny cloudflare bilen baglanyşdyryň, soňra esasy domen adyny bu domen ady bilen baglanyşdyrmak üçin SSL/TLS → adaty domen adyny ulanyň.

cloudflare R2 Adaty Domen Ady Arkaly Girip Bolmaýar

Gurlan cloudflare obýekt saklanylýan R2 de ýöriteleşdirilen domen ady bilen girip bolmaýandygy sebäpli, statiki faýllary ýerleşdirmek üçin üçünji tarap obýekt ammary ulanylmaly.

Bu ýerde cloudflare -da saklanjak üçünji tarap obýektlerini nädip baglamalydygyny görkezmek üçin mysal hökmünde alýarys backblaze.com

backblaze.com -da çelek dörediň, islendik faýly ýükläň, faýla göz aýlamak f003.backblazeb2.com Friendly URL domen adyny alyň.

Domen adyny cloudflare dan CNAME den f003.backblazeb2.com üýtgediň we proksi işlediň.

Full → şifrlemek re SSL cloudflare -ny üýtgediň

Aşakda görkezilişi ýaly öwrüliş düzgünini goşuň, ilki goýuň (birinjisi iň pes ähmiýete eýe):

Rewrite to dinamiki saýlaň we çelek adyňyza concat("/file/your_bucketname",http.request.uri.path) your_bucketname üýtgediň.

Mundan başga-da, ýokardaky cloudflare öwrüliş düzgüninde index.html file/your_bucketname/index.html -e üýtgedildi we beýleki konfigurasiýalar öňküligine galýar.