Søkemotoroptimalisering (Seo)

Prinsipp

i18n.site tar i bruk en enkeltsidearkitektur som ikke oppdateres. For å lette søkeindeksering vil en separat statisk side og sitemap.xml bli generert for gjennomsøking.

Når User-Agent til tilgangsforespørselen brukes av søkemotoren, vil forespørselen bli omdirigert til den statiske siden via 302 .

På statiske sider, bruk link for å indikere lenker til forskjellige språkversjoner av denne siden, for eksempel :

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

Lokal Nginx-Konfigurasjon

Ta .i18n/htm/main.yml konfigurasjonsfilen i demoprosjektet som et eksempel

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

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

cdn:
  v:
  jsd:

Vennligst endre først verdien på host: ovenfor til domenenavnet ditt, for eksempel xxx.com .

Deretter, i18n.site -n , vil den statiske siden bli generert i out/main/htm katalogen.

Selvfølgelig kan du også aktivere andre konfigurasjonsfiler, for eksempel først referere til konfigurasjonen av main for å lage .i18n/htm/dist.package.json og .i18n/htm/dist.yml .

Kjør så i18n.site -n -c dist slik at den statiske siden blir generert til out/dist/htm .

nginx kan settes ved å referere til konfigurasjonen nedenfor.

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;

# Ikke hurtigbufr serverarbeiderskript for lenge
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Angi lengre hurtigbuffertider for andre statiske ressurser
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Angi hvilken statisk fil søkeroboten bruker som startsideoppføring
  location = / {
    # Hvis $botLang ikke er tom, betyr det søkerobottilgang og omdirigering i henhold til den angitte språkbanen
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Enkeltside applikasjonskonfigurasjon
  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/;
  }
}

Konfigurer Objektlagring for Opplasting Av Statiske Filer

Statiske filer kan genereres lokalt, men en mer vanlig tilnærming er å laste dem opp til objektlagring.

Endre out som er konfigurert ovenfor til :

out:
  - s3

Rediger deretter ~/.config/i18n.site.yml og legg til følgende konfigurasjon :

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

I konfigurasjonen, vennligst endre i18n.site til verdien av host: i .i18n/htm/main.yml , flere objektlagre kan konfigureres under s3 , og region feltet er valgfritt (mange objektlagre trenger ikke å angi dette feltet).

Kjør deretter i18n.site -n for å publisere prosjektet på nytt.

Hvis du har endret ~/.config/i18n.site.yml og ønsker å laste opp på nytt, vennligst bruk følgende kommando i prosjektets rotkatalog for å tømme opplastingsbufferen :

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

Cloudflare-Konfigurasjon

Domenenavn er vert for cloudflare

Konverteringsregler

Legg til konverteringsreglene som vist nedenfor:

Regelkoden er som følger, vennligst endre koden "i18n.site" til ditt domenenavn:

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

Bufringsregler

Legg til cache-regler som følger:

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

Omdirigeringsregler

Angi omdirigeringsreglene som følger, vennligst endre koden "i18n.site" til ditt domenenavn

(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 Velg dynamisk omdirigering, vennligst endre /en i omdirigeringsbane concat("/en",http.request.uri.path,".htm") til standardspråket du vil at søkemotorer skal inkludere.

Baidu Intelligent Cloud Configuration

Hvis du trenger å tilby tjenester til fastlands-Kina, kan du bruke Baidu Smart Cloud .

Data lastes opp til Baidu Object Storage og bindes til Baidu Content Distribution Network.

Deretter oppretter du skriptet i EdgeJS -tjenesten som følger

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
  // Du kan angi svaroverskriften for å feilsøke utdataene, for eksempel out.XXX = 'MSG';
})

Klikk Debug , og klikk deretter Publiser til hele nettverket.

Avansert Bruk: Distribuer Trafikk Basert På Regional Oppløsning

Hvis du ønsker å tilby tjenester i fastlands-Kina og også ønsker cloudflare gratis internasjonal trafikk, kan du bruke DNS med regional oppløsning.

For eksempel gir Huawei Cloud DNS gratis regional analyse, med hvilken kinesisk fastlandstrafikk kan gå gjennom Baidu Smart Cloud, og internasjonal trafikk kan gå gjennom cloudflare .

Det er mange fallgruver i konfigurasjonen av cloudflare Her er noen punkter å merke seg :

Domenenavnet Er Vert for Andre DNS , Hvordan Bruker Du cloudflare

Bind først et vilkårlig domenenavn til cloudflare , og bruk deretter SSL/TLS → tilpasset domenenavn for å knytte hoveddomenenavnet til dette domenenavnet.

cloudflare R2 Kan Ikke Nås via Et Tilpasset Domenenavn

Fordi den cloudflare objektlagringen R2 ikke kan nås med et tilpasset domenenavn, må en tredjeparts objektlagring brukes til å plassere statiske filer.

Her tar vi backblaze.com som et eksempel for å demonstrere hvordan man binder tredjepartsobjekter og lagrer dem til cloudflare .

Opprett en bøtte ved backblaze.com , last opp en fil, klikk for å bla gjennom filen, og få domenenavnet til Friendly URL , som er f003.backblazeb2.com her.

Endre domenenavnet fra CNAME til f003.backblazeb2.com ved cloudflare og aktiver proxyen.

Endre cloudflare av SSL → krypteringsmodus, satt til Full

Legg til konverteringsregelen som vist nedenfor, sett den først (den første har lavest prioritet):

Rewrite to velg dynamisk og modifiser your_bucketname i concat("/file/your_bucketname",http.request.uri.path) til bøttenavnet ditt.

I tillegg, i cloudflare konverteringsregelen ovenfor, endres index.html til file/your_bucketname/index.html , og andre konfigurasjoner forblir de samme.