Optimîzasyona Motora Lêgerînê (Seo)

Rêzman

i18n.site mîmariya yek rûpelî ya ne-teze dipejirîne Ji bo hêsankirina îndekskirina lêgerînê, rûpelek statîk û sitemap.xml dê ji bo xêzkeran were çêkirin.

Dema ku User-Agent -ya daxwaznameya gihîştinê ji hêla gerîdeya motora lêgerînê ve tê bikar anîn, dê daxwaz bi riya 302 ji rûpela statîk re were veguheztin.

Li ser rûpelên statîk, link bikar bînin da ku lînkên guhertoyên zimanên cihê yên vê rûpelê nîşan bidin, wek :

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

Veavakirina nginx Ya Herêmî

Di projeya demo de pelê mîhengê .i18n/htm/main.yml wekî mînakek bigirin

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

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

cdn:
  v:
  jsd:

Ji kerema xwe pêşî nirxa host: ya jorîn li ser navê domaina xwe biguherînin, wek xxx.com .

Dûv re, i18n.site -n , rûpela statîk dê di pelrêça out/main/htm de were çêkirin.

Bê guman, hûn dikarin pelên mîhengê yên din jî çalak bikin, wek mînak pêşî li veavakirina main -yê binihêrin da ku .i18n/htm/dist.package.json û .i18n/htm/dist.yml biafirînin.

Dûv re i18n.site -n -c dist bimeşînin da ku rûpela statîk ji out/dist/htm re were çêkirin.

nginx dikare ji hêla veavakirina jêrîn ve were danîn.

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;

# Nivîsarên xebatkarê serverê pir dirêj cache nekin
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Ji bo çavkaniyên din ên statîk demên cache-ê dirêjtir saz bikin
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Kîjan pelê statîk ku crawler wekî têketina rûpelê malê bikar tîne destnîşan bikin
  location = / {
    # Heke $botLang ne vala ye, ev tê wê wateyê ku li gorî rêça zimanî hatî danîn û verastkirin
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Veavakirina serîlêdana yek rûpel
  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/;
  }
}

Ji Bo Barkirina Pelên Statîk Hilanîna Tiştan Mîheng Bikin

Pelên statîkî dikarin herêmî bêne çêkirin, lê nêzîkatiyek hevpar ev e ku wan li hilanîna tiştan barkirin.

out ku li jor hatî mîheng kirin biguhezîne :

out:
  - s3

Dûv re, ~/.config/i18n.site.yml biguherînin û veavakirina jêrîn lê zêde bikin :

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

Di veavakirinê de, ji kerema xwe i18n.site biguherînin nirxa host: di .i18n/htm/main.yml de, gelek firotgehên tiştan dikarin di binê s3 de werin mîheng kirin, û qada region vebijarkî ye (gelek dikanên tiştan ne hewce ne ku vê qadê saz bikin).

Dûv re i18n.site -n bimeşînin da ku projeyê ji nû ve çap bikin.

Ger we ~/.config/i18n.site.yml guhertiye û hûn dixwazin ji nû ve bar bikin, ji kerema xwe fermana jêrîn di pelrêça root ya projeyê de bikar bînin da ku kaşê barkirinê paqij bikin :

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

Veavakirina cloudflare

Navê domainê ji bo cloudflare

Qaîdeyên Veguherînê

Wekî ku li jêr tê xuyang kirin qaîdeyên veguherînê zêde bikin:

Koda qaîdeyê wiha ye, ji kerema xwe koda "i18n.site" li ser navê domaina xwe biguhezînin:

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

Qaîdeyên Caching

Qaîdeyên cache-ê wekî jêrîn zêde bikin:

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

Redirect Qaîdeyên

Rêbazên beralîkirinê wekî jêrîn bicîh bikin, ji kerema xwe koda "i18n.site" li ser navê domaina xwe biguhezînin

(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 Beralîkirina dînamîk hilbijêrin, ji kerema xwe /en di rêça beralîkirinê concat("/en",http.request.uri.path,".htm") de biguhezînin zimanê xwerû ku hûn dixwazin motorên lêgerînê tê de bikin.

Veavakirina Cloud Intelligent Baidu

Heke hûn hewce ne ku karûbaran ji axa Chinaînê re peyda bikin, hûn dikarin Baidu Smart Cloud bikar bînin.

Daneyên li Baidu Object Storage têne barkirin û bi Tora Belavkirina Naveroka Baidu ve têne girêdan.

Dûv re skrîptê di karûbarê EdgeJS de wekî jêrîn biafirînin

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
  // Tu dikarî sernivîsa bersivê saz bikî da ku encam derbikeve, wek out.XXX = 'MSG';
})

Debug bikirtînin, dûv re bikirtînin Weşandina tevaya torê.

Bikaranîna Pêşkeftî: Li Ser Bingeha Çareseriya Herêmî Seyrûseferê Belav Bikin

Ger hûn dixwazin li axa Chinaînê karûbaran peyda bikin û her weha cloudflare seyrûsefera navneteweyî ya belaş jî dixwazin, hûn dikarin DNS bi çareseriya herêmî bikar bînin.

Mînakî, Huawei DNS analîzek herêmî ya belaş peyda dike, ku pê re seyrûsefera çînî dikare bi Baidu Smart Cloud re derbas bibe, û seyrûsefera navneteweyî dikare bi cloudflare re derbas bibe.

Di veavakirina cloudflare de gelek xeletî hene. Li vir çend xal hene ku divê bala xwe bidinê :

Navê Domainê Di DNS Ên Din De Tête Mêvan Kirin, Meriv Çawa cloudflare Bikar Tîne

Pêşî navek domainek keyfî bi cloudflare ve girêdin, û dûv re SSL/TLS → navê domaina xwerû bikar bînin da ku navê domainê ya sereke bi vê navê domainê re têkildar bikin.

cloudflare R2 Bi Navek Domainek Xwerû Nayê Gihîştin

Ji ber ku hilanîna cloudflare ya çêkirî R2 nikare bi navek domainek xwerû ve were gihandin, pêdivî ye ku hilanînek tişta sêyemîn were bikar anîn da ku pelên statîk bi cîh bike.

Li backblaze.com em mînakek digirin da ku destnîşan bikin ka meriv çawa tiştên sêyemîn ên ku li cloudflare têne hilanîn girêdide.

Di backblaze.com de kelekek çêbikin, her pelê bar bikin, bikirtînin ku pelê bigerin, û navê domainê Friendly URL , ku li vir f003.backblazeb2.com ye, bistînin.

Navê domainê ji CNAME heta f003.backblazeb2.com li cloudflare biguherînin û proxy çalak bikin.

cloudflare ji SSL biguherînin → moda şîfrekirinê, li ser Full bicîh bikin

Wekî ku li jêr tê xuyang kirin qaîdeya veguheztinê zêde bikin, pêşî lê bidin (ya yekem xwedan pêşîniya herî kêm e):

Rewrite to dînamîk hilbijêrin û your_bucketname di concat("/file/your_bucketname",http.request.uri.path) de li ser navê kelê xwe biguhezînin.

Wekî din, di qaîdeya veguheztina cloudflare ya li jor de, index.html bi file/your_bucketname/index.html tê guheztin, û veavakirinên din jî heman dimînin.