Оптимизация За Търсачки (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 и се свързват към Baidu Content Distribution Network.

След това създайте скрипта в услугата EdgeJS edge , както следва

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 Cloud 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 , а другите конфигурации остават същите.