Optimizacija Za Pretraživače (Seo)

Princip

i18n.site usvaja arhitekturu jedne stranice bez osvježavanja Da bi se olakšalo indeksiranje pretraživanja, generiraće se posebna statička stranica i sitemap.xml za indeksiranje.

Kada pretraživač tražilice koristi User-Agent zahtjeva za pristup, zahtjev će biti preusmjeren na statičku stranicu putem 302 .

Na statičnim stranicama, koristite link da označite veze do različitih jezičkih verzija ove stranice, kao što je :

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

Lokalna nginx Konfiguracija

Uzmite konfiguracijsku datoteku .i18n/htm/main.yml u demo projektu kao primjer

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

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

cdn:
  v:
  jsd:

Molimo prvo izmijenite gornju vrijednost host: u ime vašeg domena, kao što je xxx.com .

Zatim, i18n.site -n , statička stranica će se generirati u out/main/htm direktoriju.

Naravno, možete omogućiti i druge konfiguracijske datoteke, kao što je prvo upućivanje na konfiguraciju main za kreiranje .i18n/htm/dist.package.json i .i18n/htm/dist.yml .

Zatim pokrenite i18n.site -n -c dist tako da će statička stranica biti generirana na out/dist/htm .

nginx se može postaviti prema konfiguraciji ispod.

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;

# Nemojte predugo keširati skripte serverskih radnika
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Postavite duže vrijeme keširanja za druge statičke resurse
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Postavite koju statičku datoteku će pretraživač koristiti kao unos početne stranice
  location = / {
    # Ako $botLang nije prazan, to znači pristup indeksiranju i preusmjeravanje prema postavljenoj putanji jezika
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Konfiguracija aplikacije na jednoj stranici
  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/;
  }
}

Konfigurirajte Pohranu Objekata Za Učitavanje Statičkih Datoteka

Statičke datoteke se mogu generirati lokalno, ali češći pristup je njihovo učitavanje u pohranu objekata.

Izmijenite gore konfiguriranu out u :

out:
  - s3

Zatim uredite ~/.config/i18n.site.yml i dodajte sljedeću konfiguraciju :

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

U konfiguraciji, promijenite i18n.site u vrijednost host: u .i18n/htm/main.yml , više skladišta objekata se mogu konfigurirati pod s3 , a polje region je opciono (mnoga skladišta objekata ne moraju postaviti ovo polje).

Zatim pokrenite i18n.site -n da ponovo objavite projekat.

Ako ste izmijenili ~/.config/i18n.site.yml i želite ponovo učitati, koristite sljedeću naredbu u korijenskom direktoriju projekta da obrišete keš memoriju za otpremanje :

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

cloudflare Konfiguracija

Ime domene hostirano na cloudflare

Pravila Konverzije

Dodajte pravila konverzije kao što je prikazano u nastavku:

Kod pravila je sljedeći, molimo izmijenite kod "i18n.site" u ime vaše domene:

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

Pravila Keširanja

Dodajte pravila keširanja na sljedeći način:

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

Pravila Preusmjeravanja

Postavite pravila preusmjeravanja na sljedeći način, modificirajte kod "i18n.site" u ime vaše domene

(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 Odaberite dinamičko preusmjeravanje, modificirajte /en u stazi preusmjeravanja concat("/en",http.request.uri.path,".htm") na zadani jezik koji želite da pretraživači uključe.

Baidu Intelligent Cloud Configuration

Ako trebate pružati usluge kontinentalnoj Kini, možete koristiti Baidu Smart Cloud .

Podaci se šalju u Baidu Object Storage i vezuju za Baidu Content Distribution Network.

Zatim kreirajte skriptu u usluzi EdgeJS na sljedeći način

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
  // Možete postaviti zaglavlje odgovora da otklanja greške na izlazu, kao što je out.XXX = 'MSG';
})

Kliknite na Debug , a zatim kliknite na Objavi na cijeloj mreži.

Napredna Upotreba: Distribuirajte Promet Na Osnovu Regionalne Rezolucije

Ako želite pružati usluge u kontinentalnoj Kini i želite cloudflare besplatnog međunarodnog saobraćaja, možete koristiti DNS s regionalnom rezolucijom.

Na primjer, Huawei DNS pruža besplatnu regionalnu analizu, s kojom promet u kontinentalnoj Kini može ići kroz Baidu Smart Cloud, a međunarodni promet može proći kroz cloudflare !

Postoje mnoge zamke u konfiguraciji cloudflare Evo nekoliko stvari koje treba napomenuti :

Ime Domene Se Nalazi U Drugom DNS , Kako Koristiti cloudflare

Prvo povežite proizvoljno ime domena na cloudflare , a zatim koristite SSL/TLS → prilagođeno ime domena da povežete ime glavnog domena sa ovim imenom domene.

cloudflare R2 Se Ne Može Pristupiti Preko Prilagođenog Imena Domene

Budući da se cloudflare skladištu objekata R2 ne može pristupiti preko prilagođenog imena domene, potrebno je koristiti skladište objekata treće strane za postavljanje statičkih datoteka.

backblaze.com uzimamo kao primjer da pokažemo kako povezati objekte treće strane i pohraniti ih na cloudflare .

Kreirajte kantu na backblaze.com , otpremite bilo koju datoteku, kliknite da pregledate datoteku i dobijte ime domene Friendly URL , što je ovdje f003.backblazeb2.com .

Promijenite ime domene iz CNAME u f003.backblazeb2.com na cloudflare i omogućite proxy.

Izmijenite cloudflare od SSL → način šifriranja, postavite na Full

Dodajte pravilo konverzije kao što je prikazano ispod, stavite ga na prvo mjesto (prvo ima najniži prioritet):

Rewrite to odaberite dinamički i modificirajte your_bucketname u concat("/file/your_bucketname",http.request.uri.path) u naziv vašeg segmenta.

Osim toga, u gornjem pravilu konverzije cloudflare , index.html se mijenja u file/your_bucketname/index.html , a ostale konfiguracije ostaju iste.