Optimalizácia Pre Vyhľadávače (Seo)

Princíp

i18n.site používa architektúru jednej stránky bez obnovenia, aby sa uľahčilo indexovanie vyhľadávania, pre prehľadávače sa vygeneruje samostatná statická stránka a stránka sitemap.xml .

Keď indexový prehľadávač vyhľadávacieho nástroja použije User-Agent v žiadosti o prístup, požiadavka bude presmerovaná na statickú stránku cez 302 .

Na statických stránkach použite link na označenie odkazov na rôzne jazykové verzie tejto stránky, ako napríklad :

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

Lokálna Konfigurácia nginx

Ako príklad si vezmite konfiguračný súbor .i18n/htm/main.yml v demo projekte

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

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

cdn:
  v:
  jsd:

Najprv upravte hodnotu host: vyššie na názov svojej domény, napríklad xxx.com .

Potom i18n.site -n , statická stránka sa vygeneruje v adresári out/main/htm .

Samozrejme, môžete povoliť aj iné konfiguračné súbory, ako napríklad najprv použiť konfiguráciu main na vytvorenie .i18n/htm/dist.package.json a .i18n/htm/dist.yml .

Potom spustite i18n.site -n -c dist , aby sa statická stránka vygenerovala na out/dist/htm .

nginx je možné nastaviť podľa konfigurácie nižšie.

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;

# Neukladajte pracovné skripty servera do vyrovnávacej pamäte príliš dlho
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Nastavte dlhšie časy vyrovnávacej pamäte pre iné statické zdroje
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Nastavte, ktorý statický súbor prehľadávač používa ako položku domovskej stránky
  location = / {
    # Ak $botLang nie je prázdne, znamená to prístup prehľadávača a presmerovanie podľa nastavenej jazykovej cesty
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Jednostránková konfigurácia aplikácie
  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/;
  }
}

Nakonfigurujte Úložisko Objektov Na Nahrávanie Statických Súborov

Statické súbory je možné generovať lokálne, ale bežnejším prístupom je ich nahranie do úložiska objektov.

Upravte out nakonfigurovanú vyššie na :

out:
  - s3

Potom upravte ~/.config/i18n.site.yml a pridajte nasledujúcu konfiguráciu :

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

V konfigurácii zmeňte hodnotu i18n.site na hodnotu host: v .i18n/htm/main.yml , viaceré úložiská objektov je možné nakonfigurovať pod s3 a pole region je voliteľné (veľa skladov objektov toto pole nemusí nastavovať).

Potom spustite i18n.site -n na opätovné zverejnenie projektu.

Ak ste upravili ~/.config/i18n.site.yml a chcete znova nahrať, použite nasledujúci príkaz v koreňovom adresári projektu na vymazanie vyrovnávacej pamäte nahrávania :

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

Konfigurácia cloudflare

Názov domény hosťovaný na cloudflare

Konverzné Pravidlá

Pridajte pravidlá konverzie, ako je uvedené nižšie:

Kód pravidla je nasledujúci, zmeňte kód „i18n.site“ na názov svojej domény:

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

Pravidlá Ukladania Do Vyrovnávacej Pamäte

Pravidlá vyrovnávacej pamäte pridajte takto:

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

Pravidlá Presmerovania

Nastavte pravidlá presmerovania nasledovne, upravte kód „i18n.site“ na názov vašej domény

(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 Vyberte dynamické presmerovanie, upravte /en v ceste presmerovania concat("/en",http.request.uri.path,".htm") na predvolený jazyk, ktorý majú vyhľadávače zahrnúť.

Konfigurácia Inteligentného Cloudu Baidu

Ak potrebujete poskytovať služby pevninskej Číne, môžete použiť Baidu Smart Cloud .

Dáta sa nahrávajú do Baidu Object Storage a viažu sa na Baidu Content Distribution Network.

Potom vytvorte skript v službe EdgeJS nasledovne

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
  // Hlavičky odpovedí možno nastaviť na ladenie výstupu, ako napríklad out.XXX = 'MSG';
})

Kliknite na Debug a potom na Publikovať v celej sieti.

Pokročilé Použitie: Rozdeľte Prevádzku Na Základe Regionálneho Rozlíšenia

Ak chcete poskytovať služby v pevninskej Číne a zároveň chcete cloudflare bezplatnú medzinárodnú dopravu, môžete použiť DNS s regionálnym rozlíšením.

Napríklad Huawei DNS poskytuje bezplatnú regionálnu analýzu, s ktorou môže pevninská čínska doprava prechádzať cez Baidu Smart Cloud a medzinárodná cez cloudflare .

V konfigurácii cloudflare je veľa úskalí. Tu je niekoľko bodov, ktoré treba poznamenať :

Názov Domény Je Hosťovaný v Inej DNS , Ako Používať cloudflare

Najprv naviažte ľubovoľný názov domény na cloudflare a potom použite SSL/TLS → vlastný názov domény na priradenie hlavného názvu domény k tomuto názvu domény.

cloudflare R2 Nie Je Možné Získať Prostredníctvom Vlastného Názvu Domény

Pretože k cloudflare ukladaciemu priestoru objektov R2 nemožno pristupovať pomocou prispôsobeného názvu domény, na umiestnenie statických súborov je potrebné použiť ukladací priestor objektov tretej strany.

cloudflare príklad uvádzame backblaze.com

Vytvorte vedro na backblaze.com , nahrajte ľubovoľný súbor, kliknutím prezerajte súbor a získajte názov domény Friendly URL , čo je tu f003.backblazeb2.com .

Zmeňte názov domény z CNAME na f003.backblazeb2.com na cloudflare a povoľte proxy.

Upravte cloudflare z SSL → režim šifrovania, nastavte na Full

Pridajte pravidlo konverzie, ako je uvedené nižšie, umiestnite ho na prvé miesto (prvé z nich má najnižšiu prioritu):

Rewrite to vyberte dynamické a upravte your_bucketname v concat("/file/your_bucketname",http.request.uri.path) na názov vášho segmentu.

Okrem toho vo vyššie uvedenom pravidle prevodu cloudflare sa index.html zmení na file/your_bucketname/index.html a ostatné konfigurácie zostávajú rovnaké.