Meklētājprogrammu Optimizācija (Seo)

Principu

i18n.site izmanto neatsvaidzinošu vienas lapas arhitektūru. Lai atvieglotu meklēšanas indeksēšanu, rāpuļprogrammām tiks ģenerēta atsevišķa statiska lapa un sitemap.xml .

Ja meklētājprogrammas rāpuļprogramma izmanto piekļuves pieprasījuma User-Agent , pieprasījums tiks novirzīts uz statisko lapu, izmantojot 302 .

Statiskās lapās izmantojiet link lai norādītu saites uz dažādām šīs lapas valodu versijām, piemēram :

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

Vietējā nginx Konfigurācija

Kā piemēru ņemiet .i18n/htm/main.yml konfigurācijas failu demonstrācijas projektā

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

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

cdn:
  v:
  jsd:

Lūdzu, vispirms mainiet iepriekš norādīto vērtību host: savā domēna vārdā, piemēram, xxx.com .

Pēc tam, i18n.site -n , statiskā lapa tiks ģenerēta direktorijā out/main/htm .

Protams, varat iespējot arī citus konfigurācijas failus, piemēram, vispirms atsaucoties uz main konfigurāciju, lai izveidotu .i18n/htm/dist.package.json un .i18n/htm/dist.yml .

Pēc tam palaidiet i18n.site -n -c dist , lai statiskā lapa tiktu ģenerēta uz out/dist/htm .

nginx var iestatīt, izmantojot tālāk norādīto konfigurāciju.

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;

# Neglabājiet servera darbinieku skriptus pārāk ilgi kešatmiņā
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Iestatiet ilgāku kešatmiņas laiku citiem statiskajiem resursiem
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Iestatiet, kuru statisko failu rāpuļprogramma izmanto kā sākumlapas ierakstu
  location = / {
    # Ja $botLang nav tukšs, tas nozīmē rāpuļprogrammas piekļuvi un novirzīšanu atbilstoši iestatītajam valodas ceļam
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Vienas lapas lietojumprogrammas konfigurācija
  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/;
  }
}

Konfigurējiet Objektu Krātuvi Statisku Failu Augšupielādei

Statiskus failus var ģenerēt lokāli, taču izplatītāka pieeja ir to augšupielāde objektu krātuvē.

Mainiet iepriekš konfigurēto out uz :

out:
  - s3

Pēc tam rediģējiet ~/.config/i18n.site.yml un pievienojiet šādu konfigurāciju :

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

Konfigurācijā, lūdzu, mainiet i18n.site uz vērtību host: in .i18n/htm/main.yml , vairākus objektu veikalus var konfigurēt zem s3 , un lauks region nav obligāts (daudziem objektu veikaliem šis lauks nav jāiestata).

Pēc tam palaidiet i18n.site -n lai atkārtoti publicētu projektu.

Ja esat mainījis ~/.config/i18n.site.yml un vēlaties augšupielādēt atkārtoti, lūdzu, izmantojiet šo komandu projekta saknes direktorijā, lai notīrītu augšupielādes kešatmiņu :

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

cloudflare Konfigurācija

Domēna vārds mitināts cloudflare

Konversijas Noteikumi

Pievienojiet konvertēšanas noteikumus, kā parādīts zemāk:

Noteikuma kods ir šāds. Lūdzu, mainiet kodu "i18n.site" uz savu domēna nosaukumu:

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

Kešatmiņas Noteikumi

Pievienojiet kešatmiņas noteikumus šādi:

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

Pāradresācijas Noteikumi

Iestatiet tālāk norādītos novirzīšanas noteikumus, lūdzu, mainiet kodu "i18n.site" savā domēna vārdā

(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 Atlasiet dinamisko novirzīšanu, lūdzu, mainiet /en concat("/en",http.request.uri.path,".htm") novirzīšanas ceļā uz noklusējuma valodu, kuru vēlaties iekļaut meklētājprogrammās.

Baidu Inteliģentā Mākoņa Konfigurācija

Ja jums ir nepieciešams sniegt pakalpojumus kontinentālajai Ķīnai, varat izmantot Baidu Smart Cloud .

Dati tiek augšupielādēti Baidu objektu krātuvē un saistīti ar Baidu satura izplatīšanas tīklu.

Pēc tam izveidojiet skriptu pakalpojumā EdgeJS

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
  // Atbilžu galvenes var iestatīt atkļūdošanas izvadei, piemēram, out.XXX = 'MSG';
})

Noklikšķiniet uz Debug un pēc tam noklikšķiniet uz Publicēt visā tīklā.

Papildu Lietošana: Sadaliet Trafiku, Pamatojoties Uz Reģionālo Izšķirtspēju

Ja vēlaties sniegt pakalpojumus kontinentālajā Ķīnā un vēlaties arī cloudflare bezmaksas starptautisko satiksmi, varat izmantot DNS ar reģionālo izšķirtspēju.

Piemēram cloudflare Huawei Cloud DNS

cloudflare konfigurācijā ir daudz nepilnību. Šeit ir daži punkti, kas jāņem vērā :

Domēna Vārds Tiek Mitināts Citā DNS , Kā Lietot cloudflare

Vispirms saistiet patvaļīgu domēna nosaukumu ar cloudflare un pēc tam izmantojiet SSL/TLS → pielāgots domēna nosaukums, lai saistītu galveno domēna nosaukumu ar šo domēna nosaukumu.

cloudflare R2 Nevar Piekļūt, Izmantojot Pielāgotu Domēna Nosaukumu

Tā kā cloudflare objektu krātuvei R2 nevar piekļūt ar pielāgotu domēna nosaukumu, statisku failu ievietošanai ir jāizmanto trešās puses objektu krātuve.

backblaze.com mēs ņemam piemēru, lai parādītu, kā saistīt trešo pušu objektus un saglabāt tos līdz cloudflare .

Izveidojiet segmentu backblaze.com , augšupielādējiet jebkuru failu, noklikšķiniet, lai pārlūkotu failu, un iegūstiet domēna nosaukumu Friendly URL , kas šeit ir f003.backblazeb2.com .

Mainiet domēna nosaukumu no CNAME uz f003.backblazeb2.com pie cloudflare un iespējojiet starpniekserveri.

Modificēt cloudflare no SSL → šifrēšanas režīms, iestatīt uz Full

Pievienojiet konvertēšanas kārtulu, kā parādīts zemāk, ievietojiet to pirmajā vietā (pirmajam ir zemākā prioritāte):

Rewrite to atlasiet dinamisko un modificējiet your_bucketname concat("/file/your_bucketname",http.request.uri.path) savā segmenta nosaukumā.

Turklāt iepriekš minētajā cloudflare konversijas kārtulā index.html tiek mainīts uz file/your_bucketname/index.html , un pārējās konfigurācijas paliek nemainīgas.