Optimization Engine Search (Seo)

Принцип

i18n.site меъмории як саҳифаи навнашавандаро қабул мекунад sitemap.xml

Вақте ки User-Agent -и дархости дастрасӣ аз ҷониби браузери системаи ҷустуҷӯ истифода мешавад, дархост тавассути 302 ба саҳифаи статикӣ равона карда мешавад.

Дар саҳифаҳои статикӣ link барои нишон додани истинодҳо ба версияҳои гуногуни забони ин саҳифа истифода баред, масалан :

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

Конфигуратсияи Маҳаллии nginx

Файли конфигуратсияи .i18n/htm/main.yml ро дар лоиҳаи намоишӣ ҳамчун мисол гиред

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

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

cdn:
  v:
  jsd:

Лутфан аввал арзиши host: -ро дар боло ба номи домени худ тағир диҳед, масалан xxx.com .

Сипас, i18n.site -n , саҳифаи статикӣ дар феҳристи out/main/htm тавлид мешавад.

Албатта, шумо инчунин метавонед файлҳои конфигуратсияи дигарро фаъол созед, масалан, аввал бо истинод ба конфигуратсияи main барои сохтани .i18n/htm/dist.package.json ва .i18n/htm/dist.yml .

Сипас i18n.site -n -c dist иҷро кунед, то саҳифаи статикӣ ба out/dist/htm тавлид шавад.

nginx метавон бо истинод ба конфигуратсияи зер танзим кард.

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;

# Скриптҳои коргари серверро барои муддати тӯлонӣ кэш накунед
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Барои дигар захираҳои статикӣ вақти дарозтари кэш таъин кунед
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Муқаррар кунед, ки кадом файли статикиро браузер ҳамчун вуруди саҳифаи асосӣ истифода мебарад
  location = / {
    # Агар $botLang холӣ набошад, ин маънои дастрасии браузер ва масир мувофиқи роҳи муқарраршудаи забонро дорад
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Конфигуратсияи замимаи як саҳифа
  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/;
  }
}

Захираи Объектро Барои Боркунии Файлҳои Статикӣ Танзим Кунед

Файлҳои статикиро метавон ба таври маҳаллӣ тавлид кард, аммо равиши бештар маъмул ин бор кардани онҳо ба нигаҳдории объект мебошад.

out дар боло танзимшударо ба :

out:
  - s3

Пас, ~/.config/i18n.site.yml ро таҳрир кунед ва конфигуратсияи зеринро илова кунед :

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

Дар конфигуратсия, лутфан i18n.site ба арзиши host: дар .i18n/htm/main.yml иваз кунед, якчанд мағозаҳои объектро дар зери s3 танзим кардан мумкин аст ва майдони region ихтиёрӣ аст (бисёр мағозаҳои объектҳо лозим нест, ки ин майдонро танзим кунанд).

Сипас i18n.site -n ро иҷро кунед, то лоиҳаро дубора нашр кунед.

Агар шумо ~/.config/i18n.site.yml тағир дода бошед ва мехоҳед дубора бор кунед, лутфан фармони зеринро дар директорияи решавӣ лоиҳа барои тоза кардани кэши боргузорӣ истифода баред :

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

Конфигуратсияи cloudflare

Номи домен дар cloudflare

Қоидаҳои Табдил

Қоидаҳои табдилро тавре, ки дар зер нишон дода шудааст, илова кунед:

Рамзи қоида чунин аст, лутфан рамзи "i18n.site" -ро ба номи домени худ тағир диҳед:

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

Қоидаҳои Кэш

Қоидаҳои кэшро ба таври зерин илова кунед:

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

Қоидаҳои Масир

Қоидаҳои масирро ба таври зерин муқаррар кунед, лутфан рамзи "i18n.site" -ро ба номи домени худ тағир диҳед

(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 Бозгашти динамикӣ-ро интихоб кунед, лутфан /en дар роҳи масир concat("/en",http.request.uri.path,".htm") ба забони пешфарз, ки мехоҳед муҳаррикҳои ҷустуҷӯ дохил кунанд, тағир диҳед.

Конфигуратсияи Абрии Интеллектуалии Baidu

Агар ба шумо лозим ояд, ки ба материкии Чин хидмат пешниҳод кунед, шумо метавонед Baidu Smart Cloud -ро истифода баред.

Маълумот ба Baidu Object Storage бор карда мешавад ва ба Шабакаи Distribution Content Baidu пайваст карда мешавад.

Пас скриптро дар хидмати 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
  // Сарлавҳаҳои посухро метавон барои ислоҳи баромади худ танзим кард, масалан out.XXX = 'MSG';
})

Debug клик кунед ва баъд дар тамоми шабака Нашр кардан-ро пахш кунед.

Истифодаи Пешрафта: Трафикро Дар Асоси Қарори Минтақавӣ Тақсим Кунед

Агар шумо хоҳед, ки дар материкии Чин хидмат пешниҳод кунед ва инчунин cloudflare трафики байналмилалии ройгон дошта бошед, шумо метавонед DNS бо ҳалли минтақавӣ истифода баред.

Масалан, Huawei DNS таҳлили минтақавии ройгонро пешкаш мекунад, ки тавассути он трафики материкии Чин тавассути Baidu Smart Cloud ва трафики байналмилалӣ метавонад аз cloudflare гузарад.

Дар конфигуратсияи cloudflare домҳои зиёде мавҷуданд. Дар ин ҷо чанд нуктаро бояд қайд кард :

Номи Домен Дар Дигар DNS Ҷойгир Карда Шудааст, Чӣ Тавр Истифода Бурдани cloudflare

Аввал номи домени ихтиёриро ба cloudflare пайваст кунед ва сипас SSL/TLS → номи домени фармоиширо барои пайваст кардани номи домени асосӣ ба ин номи домен истифода баред.

cloudflare R2 Тавассути Номи Домени Фармоишӣ Дастрас Шудан Мумкин Нест

Азбаски ба нигаҳдории объекти cloudflare R2 бо номи домени фармоишӣ дастрас шуда наметавонад, барои ҷойгиркунии файлҳои статикӣ захираи объекти тарафи сеюм бояд истифода шавад.

Дар ин ҷо мо ҳамчун мисол мегирем backblaze.com то нишон диҳем, ки чӣ гуна объектҳои тарафи сеюмро пайваст кардан ва нигоҳ доштани онҳоро ба cloudflare .

Дар backblaze.com сатил эҷод кунед, ягон файлро бор кунед, барои дидани файл клик кунед ва номи домени Friendly URL ро гиред, ки дар ин ҷо f003.backblazeb2.com аст.

Номи доменро аз CNAME ба f003.backblazeb2.com дар cloudflare иваз кунед ва проксиро фаъол созед.

Тағир додани cloudflare аз SSL → ҳолати рамзгузорӣ, ба Full таъин кунед

Қоидаи табдилро тавре, ки дар зер нишон дода шудааст, илова кунед, онро аввал гузоред (аввалинтарин афзалияти пасттарин дорад):

Rewrite to динамикро интихоб кунед ва your_bucketname дар concat("/file/your_bucketname",http.request.uri.path) ба номи сатилатон тағир диҳед.

Илова бар ин, дар қоидаи табдили cloudflare дар боло, index.html ба file/your_bucketname/index.html иваз карда мешавад ва конфигуратсияҳои дигар ҳамоно боқӣ мемонанд.