Search Engine Optimization (Seo)

Prinsipna

i18n.site adopts a non-refresh arsitéktur kaca tunggal Dina raraga mempermudah indexing pilarian, kaca statik misah jeung sitemap.xml bakal dihasilkeun pikeun crawlers mun ngorondang.

Nalika User-Agent tina pamundut aksés dipaké ku Mapay search engine, pamundut bakal dialihkeun ka kaca statik via 302 .

Dina kaca statik, paké link pikeun nunjukkeun tumbu ka vérsi basa anu béda dina kaca ieu, sapertos :

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

Konfigurasi nginx Lokal

Candak file konfigurasi .i18n/htm/main.yml dina proyék demo sabagé conto

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

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

cdn:
  v:
  jsd:

Mangga robih heula nilai host: di luhur kana nami domain anjeun, sapertos xxx.com .

Lajeng, i18n.site -n , kaca statik bakal dihasilkeun dina out/main/htm diréktori.

Tangtosna, anjeun ogé tiasa ngaktipkeun file konfigurasi anu sanés, sapertos ngarujuk heula kana konfigurasi main pikeun nyiptakeun .i18n/htm/dist.package.json sareng .i18n/htm/dist.yml .

Lajeng ngajalankeun i18n.site -n -c dist supados kaca statik bakal dihasilkeun kana out/dist/htm .

nginx tiasa diatur ku ngarujuk kana konfigurasi di handap ieu.

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;

# Ulah cache skrip worker server pikeun lila teuing
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Setel waktos cache anu langkung panjang pikeun sumber statik anu sanés
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Atur file statik mana anu dianggo ku crawler salaku éntri halaman utama
  location = / {
    # Upami $botLang
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Konfigurasi aplikasi kaca tunggal
  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/;
  }
}

Konpigurasikeun Neundeun Objék Pikeun Unggah File Statik

File statik tiasa didamel sacara lokal, tapi pendekatan anu langkung umum nyaéta unggah kana panyimpenan obyék.

Robah out anu dikonpigurasi di luhur jadi :

out:
  - s3

Teras, édit ~/.config/i18n.site.yml sareng tambahkeun konfigurasi ieu :

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

Dina konfigurasi, mangga robah i18n.site kana nilai host: di .i18n/htm/main.yml , sababaraha toko obyék bisa ngonpigurasi handapeun s3 , sarta widang region nyaeta pilihan (loba toko obyék teu kedah nyetél widang ieu).

Lajeng ngajalankeun i18n.site -n mun republish proyék.

Upami anjeun parantos ngarobih ~/.config/i18n.site.yml sareng hoyong unggah deui, punten nganggo paréntah di handap ieu dina diréktori akar proyék pikeun mupus cache unggah :

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

Konfigurasi cloudflare

Ngaran domain hosted ka cloudflare

Aturan Konvérsi

Tambahkeun aturan konvérsi sapertos anu dipidangkeun di handap ieu:

Kodeu aturan nyaéta kieu, mangga modifikasi kode "i18n.site" kana ngaran domain anjeun:

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

Aturan Cache

Tambahkeun aturan cache saperti kieu:

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

Aturan Alihan

Atur aturan alihan saperti kieu, mangga modifikasi kode "i18n.site" kana ngaran domain Anjeun

(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 Pilih alihan dinamis, mangga robih /en dina jalur alihan concat("/en",http.request.uri.path,".htm") kana basa standar anu anjeun hoyongkeun ku mesin pencari.

Konfigurasi Awan Intelligent Baidu

Upami anjeun kedah nyayogikeun jasa ka daratan Cina, anjeun tiasa nganggo Baidu Smart Cloud .

Data diunggah ka Panyimpenan Objék Baidu sareng kabeungkeut kana Jaringan Distribusi Kandungan Baidu.

Teras jieun skrip dina layanan EdgeJS sapertos kieu

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
  // Anjeun tiasa nyetel lulugu respon pikeun debug kaluaran, kayaning out.XXX = 'MSG';
})

Klik Debug , teras klik Publikasikeun ka sakumna jaringan.

Pamakéan Canggih: Distribusi Lalu Lintas Dumasar Kana Résolusi Régional

Upami anjeun hoyong nyayogikeun jasa di daratan Cina sareng hoyong ogé cloudflare lalu lintas internasional gratis, anjeun tiasa nganggo DNS kalayan résolusi régional.

Contona, Huawei Cloud DNS nyadiakeun analisis régional gratis, nu patalimarga Cina daratan bisa ngaliwatan Baidu Smart Cloud, sarta lalulintas internasional bisa ngaliwatan cloudflare .

Aya loba pitfalls dina konfigurasi cloudflare Di dieu aya sababaraha titik pikeun catetan :

Ngaran Domain Ieu Hosted Di Séjén DNS , Kumaha Ngagunakeun cloudflare

Kahiji meungkeut hiji ngaran domain wenang ka cloudflare , lajeng nganggo SSL/TLS → ngaran domain custom ngahubungkeun ngaran domain utama pikeun ngaran domain ieu.

cloudflare R2 Teu Bisa Diaksés Ngaliwatan Ngaran Domain Custom

Kusabab diwangun cloudflare dina gudang obyék R2 teu bisa diakses ku ngaran domain ngaropéa, gudang objék pihak-katilu perlu dipaké pikeun nempatkeun file statik.

Di dieu urang nyandak backblaze.com sabagé conto pikeun nunjukkeun kumaha ngabeungkeut objék pihak katilu sareng nyimpen kana cloudflare .

Jieun ember di backblaze.com , unggah file mana wae, klik pikeun ngotektak file, tur meunangkeun ngaran domain Friendly URL , nu f003.backblazeb2.com dieu.

Ganti nami domain tina CNAME ka f003.backblazeb2.com dina cloudflare sareng aktipkeun proxy.

Robah cloudflare tina SSL → modeu énkripsi, disetel ka Full

Tambihkeun aturan konvérsi sapertos anu dipidangkeun di handap, pasang heula (anu ngagaduhan prioritas panghandapna):

Rewrite to pilih dinamis sareng modifikasi your_bucketname dina concat("/file/your_bucketname",http.request.uri.path) kana nami ember anjeun.

Sajaba ti éta, dina cloudflare aturan konversi luhur, index.html dirobah jadi file/your_bucketname/index.html , sarta konfigurasi séjén tetep sarua.