Іздеу Жүйесін Оңтайландыру (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 каталогында жасалады.

Әрине, .i18n/htm/dist.package.json және .i18n/htm/dist.yml жасау үшін алдымен main конфигурациясына сілтеме жасау сияқты басқа конфигурация файлдарын қосуға болады.

Содан кейін статикалық бет out/dist/htm ге құрылатындай етіп i18n.site -n -c dist іске қосыңыз.

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: in .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 Динамикалық қайта бағыттауды таңдаңыз, concat("/en",http.request.uri.path,".htm") қайта бағыттау жолындағы /en іздеу жүйелері қосқыңыз келетін әдепкі тілге өзгертіңіз.

Baidu Интеллектуалды Бұлтты Конфигурациясы

Материктік Қытайға қызмет көрсету қажет болса, Baidu Smart Cloud қолданбасын пайдалануға болады.

Деректер Baidu нысан қоймасына жүктеп салынған және 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 нүктесінде шелек жасаңыз, кез келген файлды жүктеп салыңыз, файлды шолу үшін басыңыз және осы жерден f003.backblazeb2.com болатын Friendly URL домен атауын алыңыз.

Домен атауын cloudflare -де CNAME ден f003.backblazeb2.com ге өзгертіңіз және проксиді қосыңыз.

cloudflareSSL режимін өзгертіңіз, Full мәніне орнатыңыз

Төменде көрсетілгендей түрлендіру ережесін қосыңыз, оны бірінші орынға қойыңыз (біріншісі ең төменгі басымдыққа ие):

Rewrite to динамикалық параметрін таңдап, шелек атауына your_bucketname -ні concat("/file/your_bucketname",http.request.uri.path) өзгертіңіз.

Бұған қоса, жоғарыдағы cloudflare түрлендіру ережесінде index.html file/your_bucketname/index.html мәніне өзгертіліп, басқа конфигурациялар өзгеріссіз қалады.