Fooyyessi Mootora Barbaacha (Seo) .

Qajeelfama (Principle) Jedhu

i18n.site arkiteekcharii fuula tokkoo kan hin haaromfamne fudhata Indeeksii barbaacha haala mijeessuudhaaf, fuula istaatiksii adda ta'ee fi sitemap.xml akka sakatta'aniif ni uuma.

Yeroo User-Agent gaaffii qaqqabummaa crawler motora barbaachaan fayyadamu, gaaffiin gara fuula static karaa 302 tti ni qajeelfama.

Fuula static irratti, link fayyadamii hidhannoo gara gosoota afaanii adda addaa fuula kanaa agarsiisuuf, kan akka :

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

Qindaa'ina nginx Naannoo

Faayilii qindeessaa .i18n/htm/main.yml pirojektii demoo keessatti akka fakkeenyaatti fudhadhu

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

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

cdn:
  v:
  jsd:

Maaloo jalqaba gatii host: armaan olii gara maqaa domeenii keetii fooyyessi, kan akka xxx.com .

Sana booda, i18n.site -n , fuul-durri istaatiksii galmee out/main/htm keessatti ni uuma.

Dhugaadha, faayilii qindeessaa biroos dandeessisuun ni danda'ama, kan akka jalqaba qindeessaa main eeruun .i18n/htm/dist.package.json fi .i18n/htm/dist.yml uumuuf.

Sana booda i18n.site -n -c dist fiigi akka fuul-barruu istaatiksii gara out/dist/htm uumamu.

nginx qindeessaa armaan gadii ilaaluun saaguun ni danda'ama.

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;

# Iskiriiptii hojjetaa sarvarii yeroo dheeraaf hin kuusin
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Qabeenya istaatiksii biroof yeroo kaachota dheeraa saagi
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Faayilii istaatiksii kam akka galtee fuula jalqabaatti fayyadamu saagi
  location = / {
    # Yoo $botLang
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Qindaa'ina aplikeeshinii fuula tokkoo
  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/;
  }
}

Kuusaa Wantaa Faayilii Istaatiksii Olkaa'uuf Qindeessi

Faayiloonni istaatiksii naannootti uumamuu danda'u, garuu mala baay'ee beekamaan gara kuusaa wantaatti olkaa'uudha.

out armaan olitti qindaa'e gara :

out:
  - s3

Sana booda, ~/.config/i18n.site.yml gulaaliitii qindeessaa armaan gadii itti dabali :

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

Qindaa'ina keessatti, maaloo i18n.site gara gatii host: .i18n/htm/main.yml keessatti jijjiiri, kuusaawwan wanta hedduu s3 jalatti qindaa'uu danda'u, fi dirree region filannoodha (kuusaawwan wantaa baay'een dirree kana saaguu hin barbaachisan).

Sana booda pirojekticha irra deebi'anii maxxansuuf i18n.site -n fiigi.

Yoo ~/.config/i18n.site.yml fooyyessee fi irra deebitee olkaa'uu barbaadde, maaloo ajaja armaan gadii galmee hundee pirojektii keessatti fayyadamii kaachota olkaa'uu qulqulleessi :

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

Qindeessaa cloudflare

Maqaa domeenii gara cloudflare

Seera Jijjiirraa

Seerota jijjiirraa akka armaan gadiitti itti dabali:

Koodiin seeraa akka armaan gadiitti, maaloo koodii "i18n.site" gara maqaa domeenii keessaniitti fooyyessa:

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

Seera Kuusaa

Seerota kaachota akka armaan gadiitti dabali:

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

Seerota Qajeelchuu

Seerota kallattii jijjiiruu akka armaan gadiitti saagi, maaloo koodii "i18n.site" gara maqaa domeenii keetii fooyyessaa

(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 Qajeelfama daayinamikii filadhu, maaloo daandii kallattii concat("/en",http.request.uri.path,".htm") keessatti /en gara afaan durtii motoroonni barbaacha akka hammatan barbaaddutti fooyyessi.

Baidu Intelligent Cloud Qindeessituu

Yoo tajaajila gara guddittii Chaayinaa kennuu barbaaddan, Baidu Smart Cloud fayyadamuu dandeessu.

Deetaan gara Kuusaa Wantoota Baidutti olkaa'amee gara Neetwork Raabsa Qabiyyee Baidutti hidhama.

Sana booda iskiriiptii tajaajila qarqara EdgeJS keessatti akka armaan gadiitti uumi

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
  // Mataduree deebii akka firii sirreessuuf saaguu ni danda'ama, kan akka out.XXX = 'MSG';
})

Debug cuqaasi, sana booda gara guutummaa neetworkitti Maxxansi cuqaasi.

Fayyadama Sadarkaa Olaanaa: Furmaata Naannoo Irratti Hundaa’uun Tiraafikaa Raabsuu

Yoo tajaajila Chaayinaa guddittii keessatti kennuu barbaaddanii fi akkasumas tiraafikaa idil-addunyaa bilisaa cloudflare barbaaddan, DNS furmaata naannootiin fayyadamuu dandeessu.

Fakkeenyaaf cloudflare Huawei Cloud DNS

Qaawwa hedduun qindeessaa cloudflare Qabxiilee muraasni hubatamuu qaban kunooti :

Maqaan Domeenii DNS Biroo Keessatti Keessummeessa, Akkaataa Itti Fayyadama cloudflare

Jalqaba maqaa domeenii fedhii cloudflare tti hidhu, kana booda SSL/TLS → maqaa domeenii amala fayyadamii maqaa domeenii ijoo maqaa domeenii kanaan walqabsiisi.

cloudflare R2 Karaa Maqaa Domeenii Amala Ta'een Argamuu Hin Danda'u

Kuusaan cloudflare ijaarame R2 maqaa domeenii dhuunfatameen dhaqqabamuu waan hin dandeenyeef, kuusaan wanta qaama sadaffaa faayilii istaatiksii kaa'uuf fayyadamuu qaba.

cloudflare backblaze.com

backblaze.com irratti baaldi uumi, faayilii kamiyyuu olkaa'i, faayilii daawwachuuf cuqaasi, maqaa domeenii Friendly URL argadhu, kunis asitti f003.backblazeb2.com dha.

Maqaa domeenii CNAME irraa gara f003.backblazeb2.com cloudflare irratti jijjiirii bakka bu'aa dandeessisi.

cloudflare of SSL fooyyessi → haalata icciitii, gara Full saagi

Seera jijjiirraa akka armaan gadiitti dabali, dursi (inni jalqabaa dursa gadi aanaa qaba):

Rewrite to daayinamikii filadhuutii your_bucketname concat("/file/your_bucketname",http.request.uri.path) keessaa gara maqaa baaldi keetii fooyyessi.

Dabalataanis, seera jijjiirraa cloudflare armaan olii keessatti, index.html gara file/your_bucketname/index.html tti jijjiirama, fi qindeessootni biroo akkuma jirutti hafu.