Axtarış Motorunun Optimizasiyası (Seo)

Prinsip

i18n.site yenilənməyən tək səhifə arxitekturasını qəbul edir sitemap.xml

Giriş sorğusunun User-Agent axtarış motoru tarayıcısı tərəfindən istifadə edildikdə, sorğu 302 vasitəsilə statik səhifəyə yönləndiriləcək.

Statik səhifələrdə bu səhifənin müxtəlif dil versiyalarına keçidləri göstərmək üçün link istifadə edin, məsələn :

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

Yerli nginx Konfiqurasiyası

Nümunə olaraq demo layihəsində .i18n/htm/main.yml konfiqurasiya faylını götürün

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

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

cdn:
  v:
  jsd:

Lütfən, əvvəlcə yuxarıdakı host: dəyərini domen adınıza dəyişdirin, məsələn, xxx.com .

Sonra, i18n.site -n , statik səhifə out/main/htm kataloqunda yaradılacaq.

Əlbəttə ki, siz digər konfiqurasiya fayllarını da aktivləşdirə bilərsiniz, məsələn, .i18n/htm/dist.package.json.i18n/htm/dist.yml yaratmaq üçün əvvəlcə main konfiqurasiyasına istinad etmək.

Sonra i18n.site -n -c dist işə salın ki, statik səhifə out/dist/htm ə qədər yaradılsın.

nginx aşağıdakı konfiqurasiyaya istinad etməklə təyin edilə bilər.

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;

# Server işçi skriptlərini çox uzun müddət yaddaşda saxlamayın
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Digər statik resurslar üçün daha uzun keş vaxtları təyin edin
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Tarayıcının əsas səhifə girişi kimi hansı statik fayldan istifadə edəcəyini təyin edin
  location = / {
    # Əgər $botLang boş deyilsə, bu, təyin edilmiş dil yoluna uyğun olaraq sürünən giriş və yönləndirmə deməkdir
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Tək səhifəli proqram konfiqurasiyası
  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/;
  }
}

Statik Faylları Yükləmək Üçün Obyekt Yaddaşını Konfiqurasiya Edin

Statik fayllar yerli olaraq yaradıla bilər, lakin daha çox yayılmış yanaşma onları obyekt yaddaşına yükləməkdir.

Yuxarıda konfiqurasiya edilmiş out dəyişdirin :

out:
  - s3

Sonra ~/.config/i18n.site.yml redaktə edin və aşağıdakı konfiqurasiyanı əlavə edin :

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

Konfiqurasiyada, lütfən, i18n.site host: -də .i18n/htm/main.yml dəyərinə dəyişin, çoxlu obyekt anbarları s3 altında konfiqurasiya edilə bilər və region sahəsi isteğe bağlıdır (bir çox obyekt mağazalarında bu sahəni təyin etmək lazım deyil).

Sonra layihəni yenidən dərc etmək üçün i18n.site -n işə salın.

Əgər siz ~/.config/i18n.site.yml dəyişdirmisinizsə və yenidən yükləmək istəyirsinizsə, yükləmə önbelleğini təmizləmək üçün layihənin kök kataloqunda aşağıdakı əmrdən istifadə edin :

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

cloudflare Konfiqurasiyası

Domen adı cloudflare

Dönüşüm Qaydaları

Aşağıda göstərildiyi kimi çevirmə qaydalarını əlavə edin:

Qayda kodu aşağıdakı kimidir, lütfən, "i18n.site" kodunu domen adınıza dəyişdirin:

(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şləmə Qaydaları

Keş qaydalarına aşağıdakı kimi əlavə edin:

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

Yenidən Yönləndirmə Qaydaları

Yenidən yönləndirmə qaydalarını aşağıdakı kimi təyin edin, lütfən, “i18n.site” kodunu domen adınıza dəyişdirin.

(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 Dinamik yönləndirməni seçin, lütfən, yönləndirmə yolunda concat("/en",http.request.uri.path,".htm") /en axtarış motorlarının daxil etməsini istədiyiniz standart dilə dəyişdirin.

Baidu Ağıllı Bulud Konfiqurasiyası

Əgər materik Çinə xidmət göstərmək lazımdırsa, Baidu Smart Cloud-dan istifadə edə bilərsiniz.

Məlumat Baidu Obyekt Yaddaşına yüklənir və Baidu Məzmun Dağıtım Şəbəkəsinə bağlanır.

Sonra EdgeJS xidmətində skripti aşağıdakı kimi yaradın

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
  // Cavab başlıqları çıxışı sazlamaq üçün təyin edilə bilər, məsələn out.XXX = 'MSG';
})

Debug klikləyin, sonra bütün şəbəkədə dərc et üzərinə klikləyin.

Qabaqcıl Istifadə: Regional Qətnamə Əsasında Trafiki Paylayın

Əgər siz materik Çində xidmət göstərmək və həmçinin cloudflare pulsuz beynəlxalq trafik istəyirsinizsə, regional qətnamə ilə DNS istifadə edə bilərsiniz.

Məsələn, Huawei DNS pulsuz regional analiz təqdim edir, bununla da materik Çin trafiki Baidu Smart Cloud vasitəsilə, beynəlxalq trafik isə cloudflare dan keçə bilər.

cloudflare konfiqurasiyasında çoxlu tələlər var. Burada bir neçə məqamı qeyd etmək lazımdır :

Domen Adı Digər DNS -Da Yerləşdirilir, cloudflare Necə Istifadə Olunur

Əvvəlcə ixtiyari domen adını cloudflare ilə bağlayın və sonra əsas domen adını bu domen adı ilə əlaqələndirmək üçün SSL/TLS → xüsusi domen adından istifadə edin.

cloudflare R2 Xüsusi Domen Adı Ilə Daxil Olmaq Mümkün Deyil

cloudflare obyekt yaddaşı R2 ə fərdiləşdirilmiş domen adı ilə daxil olmaq mümkün olmadığından, statik faylları yerləşdirmək üçün üçüncü tərəf obyekt yaddaşından istifadə edilməlidir.

cloudflare -da saxlanacaq üçüncü tərəf obyektlərinin necə bağlanacağını nümayiş etdirmək üçün nümunə götürürük backblaze.com

backblaze.com -da vedrə yaradın, istənilən faylı yükləyin, fayla baxmaq üçün klikləyin və burada f003.backblazeb2.com olan Friendly URL domen adını əldə edin.

Domen adını cloudflare -da CNAME dən f003.backblazeb2.com yə dəyişdirin və proxy-ni aktivləşdirin.

SSL -dən cloudflare dəyişdirin → şifrələmə rejimi, Full yə təyin edin

Aşağıda göstərildiyi kimi çevirmə qaydasını əlavə edin, onu birinci qoyun (birincisi ən aşağı prioritetə malikdir):

Rewrite to dinamik seçin və your_bucketnameconcat("/file/your_bucketname",http.request.uri.path) kova adınıza dəyişdirin.

Bundan əlavə, yuxarıdakı cloudflare çevirmə qaydasında index.html file/your_bucketname/index.html olaraq dəyişdirilir və digər konfiqurasiyalar eyni qalır.