Search Engine Optimization (Seo)

Prinsipyo

i18n.site nagsagop sa usa ka non-refresh nga arkitektura sa usa ka panid Aron mapadali ang pag-indeks sa pagpangita, usa ka separado nga static nga panid ug sitemap.xml ang himuon para sa mga crawler nga mokamang.

Kung User-Agent sa hangyo sa pag-access gigamit sa search engine crawler, ang hangyo ibalhin sa static nga panid pinaagi sa 302 .

Sa static nga mga panid, gamita link aron ipakita ang mga link sa lain-laing mga bersyon sa pinulongan niini nga panid, sama sa :

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

Lokal Nga nginx Configuration

Kuhaa ang .i18n/htm/main.yml configuration file sa demo project isip usa ka pananglitan

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

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

cdn:
  v:
  jsd:

Palihug usba una ang bili sa host: sa ibabaw sa imong domain name, sama sa xxx.com .

Unya, i18n.site -n , ang static nga panid mabuhat sa out/main/htm nga direktoryo.

Siyempre, mahimo usab nimo nga ma-enable ang ubang mga file sa pag-configure, sama sa una nga paghisgot sa pag-configure sa main aron mahimo .i18n/htm/dist.package.json ug .i18n/htm/dist.yml .

Dayon pagdagan i18n.site -n -c dist aron ang static nga panid mahimo nga out/dist/htm .

nginx mahimong itakda pinaagi sa pagtumong sa configuration sa ubos.

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;

# Ayaw pag-cache sa mga script sa trabahante sa server sa dugay nga panahon
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Itakda ang mas taas nga oras sa cache alang sa ubang mga static nga kapanguhaan
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Ibutang kung unsang static nga file ang gigamit sa crawler isip entry sa homepage
  location = / {
    # Kung wala’y sulod $botLang , nagpasabut kini nga pag-access sa crawler ug pag-redirect sumala sa gitakda nga agianan sa pinulongan
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Usa ka panid nga pagsumpo sa aplikasyon
  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/;
  }
}

I-Configure Ang Pagtipig Sa Butang Alang Sa Pag-Upload Sa Mga Static Nga File

Ang mga static nga file mahimong mamugna sa lokal, apan ang usa ka mas komon nga paagi mao ang pag-upload niini ngadto sa pagtipig sa butang.

Usba out nga gi-configure sa ibabaw sa :

out:
  - s3

Dayon, usba ~/.config/i18n.site.yml ug idugang ang mosunod nga configuration :

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

Sa pag-configure, palihog usba i18n.site ngadto sa bili sa host: sa .i18n/htm/main.yml , daghang mga butang nga tindahan mahimong ma-configure ubos sa s3 , ug ang region nga field kay opsyonal (daghang butang nga tindahan dili kinahanglan nga itakda kini nga field).

Dayon padagana i18n.site -n aron imantala pag-usab ang proyekto.

Kung imong giusab ~/.config/i18n.site.yml ug gusto nimo nga i-upload pag-usab, palihug gamita ang mosunod nga sugo sa direktoryo sa gamut sa proyekto aron malimpyohan ang cache sa pag-upload :

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

Configuration Sa cloudflare

Ngalan sa domain nga gi-host sa cloudflare

Mga Lagda Sa Pagkakabig

Idugang ang mga lagda sa pagkakabig sama sa gipakita sa ubos:

Ang code sa lagda mao ang mosunod, palihog usba ang code nga "i18n.site" sa imong domain name:

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

Mga Lagda Sa Pag-Cache

Idugang ang mga lagda sa cache sama sa mosunod:

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

Pag-Redirect Sa Mga Lagda

Ibutang ang mga lagda sa redirection ingon sa mosunod, palihog usba ang code "i18n.site" sa imong domain name

(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 Pilia ang dinamikong redirection, palihog usba /en sa redirection path concat("/en",http.request.uri.path,".htm") ngadto sa default nga lengguwahe nga gusto nimong iapil sa mga search engine.

Baidu Intelligent Cloud Configuration

Kung kinahanglan nimo nga maghatag serbisyo sa mainland China, mahimo nimong gamiton ang Baidu Smart Cloud .

Ang datos gi-upload sa Baidu Object Storage ug gigapos sa Baidu Content Distribution Network.

Dayon paghimo sa script sa EdgeJS edge nga serbisyo sama sa mosunod

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
  // Ang mga ulohan sa tubag mahimong itakda sa pag-debug sa output, sama sa out.XXX = 'MSG';
})

I-klik ang Debug , unya i-klik ang I-publish sa tibuok network.

Abante Nga Paggamit: I-Apod-Apod Ang Trapiko Base Sa Resolusyon Sa Rehiyon

Kung gusto nimo maghatag serbisyo sa mainland China ug gusto usab cloudflare nga libre nga internasyonal nga trapiko, mahimo nimong gamiton DNS nga adunay resolusyon sa rehiyon.

Pananglitan, ang Huawei Cloud DNS naghatag ug libre nga pagtuki sa rehiyon, diin ang trapiko sa mainland sa China makaagi sa Baidu Smart Cloud, ug ang internasyonal nga trapiko mahimong moagi sa cloudflare .

Adunay daghang mga lit-ag sa configuration sa cloudflare Ania ang pipila ka mga punto nga timan-an :

Ang Ngalan Sa Domain Gi-Host Sa Ubang DNS , Kung Giunsa Paggamit cloudflare

Ibugkos una ang usa ka arbitraryong domain name sa cloudflare , ug dayon gamita SSL/TLS → custom nga domain name aron i-associate ang nag-unang domain name niini nga domain name.

cloudflare R2 Dili Ma-Access Pinaagi Sa Custom Nga Domain Name

Tungod kay ang built cloudflare in nga butang storage R2 dili ma-access sa usa ka customized domain name, usa ka third-party nga butang storage kinahanglan nga gamiton sa pagbutang sa static files.

Dinhi among gikuha backblaze.com isip usa ka pananglitan aron ipakita kung giunsa ang pagbugkos sa mga butang sa ikatulo nga partido nga tipigan sa cloudflare .

Paghimo og balde sa backblaze.com , i-upload ang bisan unsang file, i-klik aron ma-browse ang file, ug kuhaa ang domain name sa Friendly URL , nga mao ang f003.backblazeb2.com dinhi.

Usba ang domain name gikan sa CNAME ngadto f003.backblazeb2.com sa cloudflare ug i-enable ang proxy.

Usba cloudflare sa SSL → encryption mode, ibutang sa Full

Idugang ang lagda sa pagkakabig sama sa gipakita sa ubos, unaha kini (ang una adunay labing ubos nga prayoridad):

Rewrite to pilia ang dinamiko ug usba your_bucketname sa concat("/file/your_bucketname",http.request.uri.path) sa imong ngalan sa balde.

Dugang pa, sa cloudflare nga lagda sa pagkakabig sa ibabaw, index.html giusab ngadto sa file/your_bucketname/index.html , ug ang uban nga mga configuration nagpabilin nga pareho.