Bilatzaileen Optimizazioa (Seo)

Printzipioa

i18n.site orrialde bakarreko arkitektura bat hartzen du, bilaketak indexatzea errazteko, orri estatiko bereizi bat eta sitemap.xml sortuko dira arakatzaileek arakatzeko.

Sarbide-eskaeraren User-Agent bilatzailea arakatzaileak erabiltzen duenean, eskaera orri estatikora birbideratuko da 302 bidez.

Orri estatikoetan, erabili link orri honen hizkuntza-bertsio desberdinetarako estekak adierazteko, adibidez :

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

nginx Lokalaren Konfigurazioa

Hartu adibide gisa demo proiektuko .i18n/htm/main.yml konfigurazio fitxategia

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

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

cdn:
  v:
  jsd:

Mesedez, lehenik eta behin aldatu goiko host: balioa zure domeinu-izenera, adibidez, xxx.com .

Ondoren, i18n.site -n , orri estatikoa sortuko da out/main/htm direktorioan.

Jakina, beste konfigurazio-fitxategi batzuk ere gaitu ditzakezu, esate baterako, lehenik main -ren konfigurazioari erreferentzia egitea .i18n/htm/dist.package.json eta .i18n/htm/dist.yml sortzeko.

Ondoren, exekutatu i18n.site -n -c dist orri estatikoa out/dist/htm sortuko da.

nginx ezar daiteke beheko konfigurazioari erreferentzia eginez.

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;

# Ez gorde zerbitzariko langileen scriptak denbora luzez
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Ezarri beste baliabide estatiko batzuen cache-denbora luzeagoak
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Ezarri zein fitxategi estatiko erabiltzen duen arakatzaileak hasierako orrialdeko sarrera gisa
  location = / {
    # $botLang hutsik ez badago, arakatzailearen sarbidea eta birbideratzea esan nahi du ezarritako hizkuntza-bidearen arabera
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Orri bakarreko aplikazioaren konfigurazioa
  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/;
  }
}

Konfiguratu Objektuen Biltegia Fitxategi Estatikoak Kargatzeko

Fitxategi estatikoak lokalean sor daitezke, baina ohikoagoa den ikuspegia objektuen biltegiratzera igotzea da.

Aldatu goian konfiguratutako out :

out:
  - s3

Ondoren, editatu ~/.config/i18n.site.yml eta gehitu konfigurazio hau :

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

Konfigurazioan, mesedez aldatu i18n.site host: in .i18n/htm/main.yml baliora, hainbat objektu-biltegiak s3 azpian konfigura daitezke eta region eremua aukerakoa da (objektu-denda askok ez dute eremu hau ezarri behar).

Ondoren, exekutatu i18n.site -n proiektua berriro argitaratzeko.

~/.config/i18n.site.yml aldatu baduzu eta berriro kargatu nahi baduzu, erabili hurrengo komandoa proiektuaren erroko direktorioa kargatzeko cachea garbitzeko :

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

cloudflare Konfigurazioa

Domeinuaren izena cloudflare

Bihurketa-Arauak

Gehitu bihurketa-arauak behean erakusten den moduan:

Arau-kodea honako hau da, mesedez aldatu "i18n.site" kodea zure domeinu-izenera:

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

Cachean Gordetzeko Arauak

Gehitu cache-arauak honela:

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

Birbideratu Arauak

Ezarri birbideratzeko arauak honela, mesedez aldatu "i18n.site" kodea zure domeinu-izenarekin

(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 Hautatu birbideratze dinamikoa, aldatu /en birbideratze-bideko concat("/en",http.request.uri.path,".htm") bilatzaileen hizkuntza lehenetsira.

Baidu Hodei Adimendunaren Konfigurazioa

Txina kontinentalean zerbitzuak eskaini behar badituzu, Baidu Smart Cloud erabil dezakezu.

Datuak Baidu Object Storage-ra kargatzen dira eta Baidu Content Distribution Network-era lotzen dira.

Ondoren, sortu script-a edge 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
  // Erantzunen goiburuak irteera arazketarako ezar daitezke, hala nola out.XXX = 'MSG';
})

Sakatu Debug eta, ondoren, Argitaratu sare osoan.

Erabilera Aurreratua: Banatu Trafikoa Eskualdeko Bereizmenaren Arabera

Txina kontinentalean zerbitzuak eskaini nahi badituzu eta nazioarteko trafiko cloudflare doan ere nahi baduzu, DNS erabil dezakezu eskualdeko bereizmenarekin.

Adibidez, Huawei Cloud DNS -k doako eskualdeko analisia eskaintzen du, eta horrekin Txinako kontinenteko trafikoa Baidu Smart Cloud-etik pasa daiteke eta nazioarteko trafikoa cloudflare pasa daiteke.

cloudflare ren konfigurazioan hutsune asko daude. Hona hemen kontuan hartu beharreko puntu batzuk :

Domeinu-Izena Beste DNS Batean Dago, Nola Erabili cloudflare

Lehenik eta behin, lotu arbitrariozko domeinu-izen bat cloudflare , eta, ondoren, erabili SSL/TLS → domeinu-izen pertsonalizatua domeinu-izen nagusia domeinu-izen honi lotzeko.

cloudflare R2 Ezin Da Domeinu-Izen Pertsonalizatu Baten Bidez Sartu

cloudflare objektuen biltegiratze R2 ezin denez domeinu-izen pertsonalizatu batek atzitu, hirugarrenen objektuen biltegiratze bat erabili behar da fitxategi estatikoak jartzeko.

backblaze.com adibide gisa hartzen dugu hirugarrenen objektuak cloudflare -n gordetzeko nola lotu erakusteko.

Sortu ontzi bat backblaze.com -n, igo edozein fitxategi, egin klik fitxategia arakatzeko eta lortu Friendly URL domeinu-izena, hau da, f003.backblazeb2.com hemen.

Aldatu domeinu-izena CNAME f003.backblazeb2.com cloudflare eta gaitu proxya.

Aldatu SSL cloudflare → enkriptatzeko modua, ezarri Full

Gehitu bihurketa-araua behean agertzen den moduan, jarri lehena (lehenak lehentasun txikiena du):

Rewrite to hautatu dinamikoa eta aldatu your_bucketname in concat("/file/your_bucketname",http.request.uri.path) zure kuboaren izenera.

Gainera, goiko cloudflare bihurketa-arauan, index.html file/your_bucketname/index.html -ra aldatzen da eta beste konfigurazioek berdin jarraitzen dute.