Søgemaskineoptimering (Seo)

Princip

i18n.site anvender en enkeltsidearkitektur, der ikke opdateres. For at lette søgeindeksering vil der blive genereret en separat statisk side og sitemap.xml , som crawlere kan gennemgå.

Når User-Agent for adgangsanmodningen bruges af søgemaskinecrawleren, vil anmodningen blive omdirigeret til den statiske side via 302 .

På statiske sider skal du bruge link til at angive links til forskellige sprogversioner af denne side, såsom :

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

Lokal Nginx-Konfiguration

Tag .i18n/htm/main.yml konfigurationsfilen i demoprojektet som et eksempel

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

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

cdn:
  v:
  jsd:

Rediger først værdien af host: ovenfor til dit domænenavn, såsom xxx.com .

Derefter, i18n.site -n , vil den statiske side blive genereret i mappen out/main/htm .

Selvfølgelig kan du også aktivere andre konfigurationsfiler, såsom først at henvise til konfigurationen af main for at oprette .i18n/htm/dist.package.json og .i18n/htm/dist.yml .

Kør derefter i18n.site -n -c dist , så den statiske side vil blive genereret til out/dist/htm .

nginx kan indstilles ved at henvise til nedenstående konfiguration.

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;

# Cache ikke serverarbejderscripts for længe
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

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

# Indstil hvilken statisk fil crawleren bruger som startsideindgang
  location = / {
    # Hvis $botLang ikke er tom, betyder det crawler-adgang og omdirigering i henhold til den indstillede sprogsti
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Enkeltside applikationskonfiguration
  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 Objektlager Til Upload Af Statiske Filer

Statiske filer kan genereres lokalt, men en mere almindelig tilgang er at uploade dem til objektlager.

Rediger out konfigureret ovenfor til :

out:
  - s3

Rediger derefter ~/.config/i18n.site.yml og tilføj følgende konfiguration :

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

I konfigurationen skal du ændre i18n.site til værdien af host: i .i18n/htm/main.yml , flere objektlagre kan konfigureres under s3 , og feltet region er valgfrit (mange objektlagre behøver ikke at indstille dette felt).

Kør derefter i18n.site -n for at genudgive projektet.

Hvis du har ændret ~/.config/i18n.site.yml og ønsker at uploade igen, skal du bruge følgende kommando i projektets rodbibliotek for at rydde upload-cachen :

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

Cloudflare-Konfiguration

Domænenavn hostet til cloudflare

Konverteringsregler

Tilføj konverteringsreglerne som vist nedenfor:

Regelkoden er som følger, modificer venligst koden "i18n.site" til dit domænenavn:

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

Caching Regler

Tilføj 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

Indstil omdirigeringsreglerne som følger, modificer venligst koden "i18n.site" til dit domænenavn

(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 Vælg dynamisk omdirigering, modificer venligst /en i omdirigeringssti concat("/en",http.request.uri.path,".htm") til det standardsprog, som søgemaskinerne skal inkludere.

Baidu Intelligent Cloud-Konfiguration

Hvis du skal levere tjenester til det kinesiske fastland, kan du bruge Baidu Smart Cloud .

Data uploades til Baidu Object Storage og bindes til Baidu Content Distribution Network.

Opret derefter scriptet i Edge 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
  // Svarheadere kan indstilles til at fejlfinde output, såsom out.XXX = 'MSG';
})

Klik på Debug , og klik derefter på Udgiv til hele netværket.

Avanceret Brug: Fordel Trafik Baseret På Regional Opløsning

Hvis du vil levere tjenester på det kinesiske fastland og også ønsker cloudflare gratis international trafik, kan du bruge DNS med regional opløsning.

For eksempel giver Huawei Cloud DNS gratis regional analyse, hvormed den kinesiske trafik kan gå gennem Baidu Smart Cloud, og international trafik kan gå gennem cloudflare .

Der er mange faldgruber i konfigurationen af cloudflare Her er et par punkter at bemærke :

Domænenavnet Er Hostet I Andre DNS , Hvordan Man Bruger cloudflare

Bind først et vilkårligt domænenavn til cloudflare , og brug derefter SSL/TLS → brugerdefineret domænenavn til at knytte hoveddomænenavnet til dette domænenavn.

cloudflare R2 Kan Ikke Tilgås via Et Brugerdefineret Domænenavn

Fordi det cloudflare objektlager R2 ikke kan tilgås af et tilpasset domænenavn, skal der bruges en tredjeparts objektlager til at placere statiske filer.

Her tager vi backblaze.com som et eksempel for at demonstrere, hvordan man binder tredjepartsobjekter, der skal gemmes ved cloudflare .

Opret en bucket ved backblaze.com , upload en fil, klik for at gennemse filen og få domænenavnet på Friendly URL , som er f003.backblazeb2.com her.

Skift domænenavnet fra CNAME til f003.backblazeb2.com ved cloudflare og aktiver proxyen.

Rediger cloudflare af SSL → krypteringstilstand, indstillet til Full

Tilføj konverteringsreglen som vist nedenfor, sæt den først (den første har den laveste prioritet):

Rewrite to vælg dynamisk og modificer your_bucketname i concat("/file/your_bucketname",http.request.uri.path) til dit bucket-navn.

Derudover ændres index.html i cloudflare konverteringsreglen ovenfor til file/your_bucketname/index.html , og andre konfigurationer forbliver de samme.