Search Engine Optimization (Seo)

Prinsipe

i18n.site nimt in net-ferfarske arsjitektuer fan ien side oan sitemap.xml

As User-Agent fan it tagongsfersyk wurdt brûkt troch de sykmasjine-crawler, sil it fersyk fia 302 wurde omlaat nei de statyske side.

Brûk op statyske siden link om keppelings oan te jaan nei ferskate taalferzjes fan dizze side, lykas :

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

Lokale Nginx-Konfiguraasje

Nim it .i18n/htm/main.yml konfiguraasjebestân yn it demoprojekt as foarbyld

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

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

cdn:
  v:
  jsd:

Wizigje asjebleaft earst de wearde fan host: hjirboppe oan jo domeinnamme, lykas xxx.com .

Dan, i18n.site -n , sil de statyske side generearre wurde yn 'e out/main/htm map.

Fansels kinne jo ek oare konfiguraasjebestannen ynskeakelje, lykas earst ferwize nei de konfiguraasje fan main om .i18n/htm/dist.package.json en .i18n/htm/dist.yml te meitsjen.

Dan rinne i18n.site -n -c dist sadat de statyske side wurdt oanmakke nei out/dist/htm .

nginx kin ynsteld wurde troch te ferwizen nei de konfiguraasje hjirûnder.

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;

# Net cache server wurker skripts foar te lang
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Stel langere cachetiden yn foar oare statyske boarnen
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Stel yn hokker statyske bestân de crawler brûkt as de thússide-yngong
  location = / {
    # As $botLang net leech is, betsjut it crawler tagong en trochferwizing neffens it ynstelde taalpaad
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Applikaasjekonfiguraasje foar ien side
  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/;
  }
}

Konfigurearje Foarwerp Opslach Foar It Opladen Fan Statyske Triemmen

Statyske bestannen kinne lokaal oanmakke wurde, mar in mear foarkommende oanpak is om se te uploaden nei objektopslach.

Feroarje out nei :

out:
  - s3

Bewurkje dan ~/.config/i18n.site.yml en foegje de folgjende konfiguraasje ta :

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

Yn 'e konfiguraasje feroarje asjebleaft i18n.site nei de wearde fan host: yn .i18n/htm/main.yml , meardere objektwinkels kinne wurde konfigureare ûnder s3 , en it fjild region is opsjoneel (in protte objektwinkels hoege dit fjild net yn te stellen).

Run dan i18n.site -n om it projekt opnij te publisearjen.

As jo ~/.config/i18n.site.yml wizige hawwe en opnij wolle uploade, brûk dan asjebleaft it folgjende kommando yn 'e projektrootmap om de uploadcache te wiskjen :

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

cloudflare Konfiguraasje

Domeinnamme hosted oan cloudflare

Konverzje Regels

Foegje de konverzjeregels ta lykas hjirûnder werjûn:

De regelkoade is as folget, wizigje asjebleaft de koade "i18n.site" oan jo domeinnamme:

(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 Regels

Foegje cacheregels ta as folget:

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

Redirect Regels

Stel de omliedingsregels as folget yn, wizigje asjebleaft de koade "i18n.site" nei jo domeinnamme

(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 Selektearje dynamyske omlieding, wizigje asjebleaft /en yn trochferwizingspaad concat("/en",http.request.uri.path,".htm") nei de standerttaal dy't jo wolle dat sykmasjines opnimme.

Baidu Intelligent Cloud Configuration

As jo tsjinsten moatte leverje oan it fêstelân fan Sina, kinne jo Baidu Smart Cloud brûke.

Gegevens wurde opladen nei Baidu Object Storage en bûn oan Baidu Content Distribution Network.

Meitsje dan it skript yn EdgeJS -tsjinst as folget

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
  // Jo kinne de antwurdkop ynstelle om de útfier te debuggen, lykas out.XXX = 'MSG';
})

Klik op Debug , klik dan op Publisearje nei it hiele netwurk.

Avansearre Gebrûk: Ferkear Fersprieden Op Basis Fan Regionale Resolúsje

As jo tsjinsten op it fêstelân fan Sina wolle leverje en ek cloudflare fergees ynternasjonaal ferkear wolle, kinne jo DNS brûke mei regionale resolúsje.

Bygelyks, Huawei DNS biedt fergese regionale analyse, wêrmei't Sineesk ferkear fia Baidu Smart Cloud kin gean, en ynternasjonaal ferkear kin troch cloudflare gean.

D'r binne in protte pitfalls yn 'e konfiguraasje fan cloudflare Hjir binne in pear punten om op te merken :

De Domeinnamme Wurdt Host Yn Oare DNS , Hoe Te Brûken cloudflare

Bine earst in willekeurige domeinnamme oan cloudflare , en brûk dan SSL/TLS → oanpaste domeinnamme om de haaddomeinnamme oan dizze domeinnamme te assosjearjen.

cloudflare R2 Kin Net Tagonklik Wurde Fia in Oanpaste Domeinnamme

Om't de cloudflare objektopslach R2 net tagonklik is troch in oanpaste domeinnamme, moat in objektopslach fan tredden brûkt wurde om statyske bestannen te pleatsen.

backblaze.com nimme wy as foarbyld om te demonstrearjen hoe objekten fan tredden te binen om op cloudflare te bewarjen.

Meitsje in emmer by backblaze.com , upload elk bestân, klikje om it bestân te blêdzjen, en krije de domeinnamme fan Friendly URL , dat is f003.backblazeb2.com hjir.

Feroarje de domeinnamme fan CNAME nei f003.backblazeb2.com by cloudflare en aktivearje de proxy.

Wizigje cloudflare fan SSL → fersiferingsmodus, ynsteld op Full

Foegje de konverzjeregel ta lykas hjirûnder werjûn, set it earst (de earste hat de leechste prioriteit):

Rewrite to selektearje dynamysk en wizigje your_bucketname yn concat("/file/your_bucketname",http.request.uri.path) oan jo emmernamme.

Derneist, yn 'e cloudflare konverzjeregel hjirboppe, wurdt index.html feroare yn file/your_bucketname/index.html , en oare konfiguraasjes bliuwe itselde.