Hakukoneoptimointi (Seo)

Periaate

i18n.site ottaa käyttöön päivittämättömän yhden sivun arkkitehtuurin Haun indeksoinnin helpottamiseksi indeksointiroboteille luodaan erillinen staattinen sivu ja sitemap.xml .

Kun hakukoneen indeksointirobotti käyttää pääsypyynnön User-Agent , pyyntö ohjataan staattiselle sivulle 302 kautta.

Käytä staattisilla sivuilla link osoittaaksesi linkit tämän sivun eri kieliversioihin, kuten :

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

Paikallinen Nginx-Määritys

Otetaan esimerkkinä esittelyprojektin .i18n/htm/main.yml määritystiedosto

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

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

cdn:
  v:
  jsd:

Muokkaa ensin yllä olevaa host: :n arvoa verkkotunnuksesi nimeksi, kuten xxx.com .

Sitten i18n.site -n , staattinen sivu luodaan hakemistoon out/main/htm .

Tietenkin voit ottaa käyttöön myös muita konfiguraatiotiedostoja, esimerkiksi viittaamalla ensin main :n määritykseen luodaksesi .i18n/htm/dist.package.json ja .i18n/htm/dist.yml .

Suorita sitten i18n.site -n -c dist , jotta staattinen sivu luodaan out/dist/htm :ksi.

nginx voidaan asettaa alla olevan konfiguraation avulla.

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;

# Älä välimuistissa palvelintyön skriptejä liian kauan
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Aseta pidemmät välimuistiajat muille staattisille resursseille
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Määritä, mitä staattista tiedostoa indeksointirobotti käyttää etusivun merkintänä
  location = / {
    # Jos $botLang ei ole tyhjä, se tarkoittaa indeksointia ja uudelleenohjausta määritetyn kielipolun mukaan
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Yhden sivun sovelluskokoonpano
  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/;
  }
}

Määritä Objektin Tallennustila Staattisten Tiedostojen Lataamista Varten

Staattiset tiedostot voidaan luoda paikallisesti, mutta yleisempi tapa on ladata ne objektien tallennustilaan.

Muuta yllä määritetty out arvoksi :

out:
  - s3

Muokkaa sitten arvoa ~/.config/i18n.site.yml ja lisää seuraava kokoonpano :

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

Muuta kokoonpanossa i18n.site arvoksi host: in .i18n/htm/main.yml , useita objektivarastoja voidaan määrittää s3 alle ja region -kenttä on valinnainen (monien objektitalojen ei tarvitse asettaa tätä kenttää).

Suorita sitten i18n.site -n julkaistaksesi projektin uudelleen.

Jos olet muokannut arvoa ~/.config/i18n.site.yml ja haluat ladata uudelleen, käytä seuraavaa komentoa projektin juurihakemistossa tyhjentääksesi lähetysvälimuistin :

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

Cloudflare-Kokoonpano

Verkkotunnus isännöi cloudflare

Muunnossäännöt

Lisää muunnossäännöt alla olevan kuvan mukaisesti:

Sääntökoodi on seuraava, muuta koodi "i18n.site" verkkotunnuksesi nimeksi:

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

Välimuistin Säännöt

Lisää välimuistisäännöt seuraavasti:

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

Uudelleenohjaussäännöt

Aseta uudelleenohjaussäännöt seuraavasti, muuta koodi "i18n.site" verkkotunnuksesi nimeksi

(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 Valitse dynaaminen uudelleenohjaus, muuta /en uudelleenohjauspolussa concat("/en",http.request.uri.path,".htm") oletuskieleksi, jonka haluat hakukoneiden sisällyttävän.

Baidu Intelligent Cloud Configuration

Jos sinun on tarjottava palveluita Manner-Kiinaan, voit käyttää Baidu Smart Cloudia .

Tiedot ladataan Baidu Object Storageen ja sidotaan Baidu Content Distribution Networkiin.

Luo sitten skripti EdgeJS seuraavasti

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
  // Vastausotsikot voidaan asettaa virheenkorjaustuloksi, kuten out.XXX = 'MSG';
})

Napsauta Debug ja napsauta sitten Julkaise koko verkossa.

Edistynyt Käyttö: Jaa Liikennettä Alueellisen Resoluution Perusteella

Jos haluat tarjota palveluita Manner-Kiinassa ja haluat myös cloudflare ilmaista kansainvälistä liikennettä, voit käyttää DNS alueellisella resoluutiolla.

Esimerkiksi Huawei DNS tarjoaa ilmaisen alueanalyysin, jonka avulla Manner-Kiinan liikenne voi kulkea Baidu Smart Cloudin kautta ja kansainvälinen liikenne cloudflare kautta.

cloudflare :n asetuksissa on monia sudenkuoppia. Tässä on muutamia huomioitavia seikkoja :

Verkkotunnusta Isännöi Muu DNS , Kuinka Käyttää cloudflare

Sido ensin mielivaltainen verkkotunnuksen nimi arvoon cloudflare ja liitä pääverkkotunnus tähän verkkotunnukseen käyttämällä SSL/TLS → mukautettu verkkotunnus.

cloudflare R2 Ei Voi Käyttää Mukautetun Verkkotunnuksen Kautta

Koska cloudflare objektimuistia R2 ei voi käyttää mukautetulla toimialueen nimellä, staattisten tiedostojen sijoittamiseen on käytettävä kolmannen osapuolen objektitallennustilaa.

backblaze.com otamme esimerkkinä, kuinka sidotaan kolmannen osapuolen objektit, jotka tallennetaan arvoon cloudflare .

Luo ryhmä backblaze.com :lle, lataa mikä tahansa tiedosto, napsauta selataksesi tiedostoa ja hanki verkkotunnuksen nimi Friendly URL , joka on f003.backblazeb2.com tässä.

Muuta verkkotunnuksen nimi arvosta CNAME arvoon f003.backblazeb2.com kohdassa cloudflare ja ota välityspalvelin käyttöön.

Muokkaa cloudflare → salaustila SSL aseta arvoon Full

Lisää muunnossääntö alla olevan kuvan mukaisesti, aseta se ensin (ensimmäisellä on alhaisin prioriteetti):

Rewrite to valitse dynaaminen ja muokkaa your_bucketname in concat("/file/your_bucketname",http.request.uri.path) -säilön nimeäsi.

Lisäksi yllä olevassa cloudflare muunnossäännössä index.html muutetaan arvoksi file/your_bucketname/index.html ja muut kokoonpanot pysyvät samoina.