باشکردنی بزوێنەری گەڕان (SEO)

بنەما

i18n.site بیناسازی تاکە لاپەڕەی نوێنەکردنەوە دەگرێتەبەر بۆ ئەوەی ئیندێکسکردنی گەڕان ئاسانتر بێت، لاپەڕەیەکی ئیستاتیک و sitemap.xml جیاواز بۆ کراولەکان دروست دەکرێت.

کاتێک User-Agent ی داواکاری دەستڕاگەیشتن لەلایەن کراولەری بزوێنەری گەڕان بەکاردەهێنرێت، داواکارییەکە لە ڕێگەی 302 ەوە ئاراستە دەکرێتەوە بۆ لاپەڕەی ئیستاتیک.

لە لاپەڕە ئیستاتیکەکاندا link بەکاربهێنە بۆ ئاماژەدان بە بەستەرەکانی وەشانی زمانی جیاوازی ئەم لاپەڕەیە، وەک :

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

ڕێکخستنی nginx ناوخۆیی

فایلە ڕێکخستنی .i18n/htm/main.yml لە پڕۆژەی دیمۆدا وەک نموونە وەربگرە

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

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

cdn:
  v:
  jsd:

تکایە سەرەتا بەهای host: لە سەرەوە دەستکاری بکە بۆ ناوی دۆمەینەکەت، وەک xxx.com .

پاشان، i18n.site -n ، لاپەڕەی ئیستاتیک لە بەڕێوەبەرایەتی out/main/htm دروست دەکرێت.

بێگومان دەتوانیت فایلەکانی تری ڕێکخستن چالاک بکەیت، وەک سەرەتا ئاماژەکردن بە ڕێکخستنی main بۆ دروستکردنی .i18n/htm/dist.package.json و .i18n/htm/dist.yml .

پاشان i18n.site -n -c dist جێبەجێ بکە تا لاپەڕەی ئیستاتیک بۆ out/dist/htm دروست دەبێت.

دەتوانرێت nginx بە ئاماژەدان بە ڕێکخستنەکانی خوارەوە ڕێکبخرێت.

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;

# سکریپتەکانی کارمەندی سێرڤەر بۆ ماوەیەکی زۆر لە کاش مەکە
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# کاتەکانی کاش درێژتر بۆ سەرچاوە ئیستاتیکەکانی تر دابنێ
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# ڕێکبخە کە کام فایلێکی ئیستاتیک کراولەر وەک هاتنە ژوورەوەی لاپەڕەی سەرەکی بەکاردەهێنێت
  location = / {
    # ئەگەر $botLang
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# ڕێکخستنی بەرنامەی تاکە لاپەڕە
  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/;
  }
}

ڕێکخستنی هەڵگرتنی شتەکان بۆ بارکردنی فایلە ئیستاتیکەکان

دەتوانرێت فایلە ئیستاتیکەکان بە شێوەیەکی ناوخۆیی دروست بکرێت، بەڵام ڕێگەیەکی باوتر ئەوەیە کە باریان بکەیت بۆ هەڵگرتنی شتەکان.

دەستکاری out سەرەوە بکە کە لە سەرەوە ڕێکخراوە بۆ :

out:
  - s3

پاشان، دەستکاری ~/.config/i18n.site.yml بکە و ئەم ڕێکخستنەی خوارەوە زیاد بکە :

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

لە ڕێکخستنەکەدا، تکایە i18n.site بگۆڕە بۆ بەهای host: لە .i18n/htm/main.yml ، دەتوانرێت چەندین کۆگای شت لە ژێر s3 ڕێکبخرێت، و مەیدانی region هەڵبژاردەیە (زۆرێک لە کۆگاکانی شت پێویست ناکات ئەم بوارە دابنێن).

پاشان i18n.site -n جێبەجێ بکە بۆ دووبارە بڵاوکردنەوەی پڕۆژەکە.

ئەگەر دەستکاری ~/.config/i18n.site.yml کردووە و دەتەوێت دووبارە باربکەیتەوە، تکایە ئەم فرمانەی خوارەوە لە ناوەڕۆکی ڕەگی پڕۆژەکەدا بەکاربهێنە بۆ پاککردنەوەی کاشی بارکردنەکە :

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

ڕێکخستنی cloudflare

ناوی دۆمەین هۆست کراوە بۆ cloudflare

یاساکانی گۆڕانکاری

یاساکانی گۆڕین زیاد بکە وەک لە خوارەوە دیارە:

کۆدی یاساکە بەم شێوەیەیە، تکایە دەستکاری کۆدی "i18n.site" بکە بۆ ناوی دۆمەینەکەت:

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

یاساکانی کاشکردن

یاساکانی کاش زیاد بکە بەم شێوەیە:

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

یاساکانی ئاڕاستەکردنەوە

یاساکانی ئاڕاستەکردنەوە بەم شێوەیە دابنێ، تکایە کۆدی "i18n.site" دەستکاری بکە بۆ ناوی دۆمەینەکەت

(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 ئاڕاستەکردنەوەی داینامیکی هەڵبژێرە، تکایە دەستکاری /en بکە لە ڕێڕەوی ئاڕاستەکردنەوە concat("/en",http.request.uri.path,".htm") بۆ ئەو زمانە پێشوەختەیەی کە دەتەوێت بزوێنەری گەڕان لەخۆی بگرێت.

ڕێکخستنی هەوری زیرەکی Baidu

ئەگەر پێویستت بە پێشکەشکردنی خزمەتگوزارییە بۆ چین، دەتوانیت Baidu Smart Cloud بەکاربهێنیت.

داتاکان باردەکرێن بۆ هەڵگرتنی شتەکانی بایدو و بەستراوەتەوە بە تۆڕی دابەشکردنی ناوەڕۆکی بایدو.

پاشان سکریپتەکە لە EdgeJS edge service دروست بکە بەم شێوەیە

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
  // دەتوانیت سەردێڕی وەڵامەکە ڕێکبخەیت بۆ چاککردنی دەرچوونەکە، وەک out.XXX = 'MSG';
})

کلیک لە Debug بکە، پاشان کلیک لە Publish بکە بۆ تەواوی تۆڕەکە.

بەکارهێنانی پێشکەوتوو: دابەشکردنی ترافیک لەسەر بنەمای چارەسەری ناوچەیی

ئەگەر دەتەوێت خزمەتگوزاری پێشکەش بکەیت لە چین و هەروەها دەتەوێت cloudflare هاتوچۆی نێودەوڵەتی بێبەرامبەر، دەتوانیت DNS بە ڕوونی ناوچەیی بەکاربهێنیت.

بۆ نموونە، DNS کلاود شیکاری ناوچەیی بەخۆڕایی پێشکەش دەکات، کە بەهۆیەوە هاتوچۆی چینی سەرەکی دەتوانێت لە ڕێگەی بایدو سمارت کلاودەوە تێپەڕێت، و هاتوچۆی نێودەوڵەتی دەتوانێت بە cloudflare تێپەڕێت.

چەندین تەڵە لە ڕێکخستنی cloudflare لێرەدا چەند خاڵێک دەخەینەڕوو کە دەبێت تێبینی بکەین :

ناوی دۆمەینەکە لە DNS تردا هۆست کراوە، چۆنیەتی بەکارهێنانی cloudflare

سەرەتا ناوی دۆمەینێکی ئارەزوومەندانە بە cloudflare ببەستە، و پاشان SSL/TLS → ناوی دۆمەینی تایبەت بەکاربهێنە بۆ پەیوەستکردنی ناوی دۆمەینی سەرەکی بەم ناوە دۆمەینە.

cloudflare R2 ناتوانرێت لە ڕێگەی ناوی دۆمەینی تایبەتمەندەوە دەستی پێ بگات

لەبەر ئەوەی هەڵگرتنی شتە cloudflare نراوەکان R2 ناتوانرێت بە ناوی دۆمەینی تایبەتمەند دەستی پێ بگات، هەڵگرتنی شتەکانی لایەنی سێیەم پێویستە بۆ دانانی پەڕگەی ئیستاتیک بەکاربهێنرێت.

cloudflare backblaze.com

سەتڵێک لە backblaze.com دروست بکە، هەر فایلێک باربکە، کلیک بکە بۆ گەڕان بە فایلەکەدا، و ناوی دۆمەینی Friendly URL بەدەست بهێنە کە لێرەدا f003.backblazeb2.com ە.

ناوی دۆمەینەکە لە CNAME بگۆڕە بۆ f003.backblazeb2.com لە cloudflare و پرۆکسی چالاک بکە.

دەستکاری cloudflare لە SSL → دۆخی کۆدکردن، دانراوە بۆ Full

یاسای گۆڕین زیاد بکە وەک لە خوارەوە دیارە، لە پێشەوە بیخە (یەکەمیان کەمترین ئەولەویەتی هەیە):

Rewrite to داینامیکی هەڵبژێرە و دەستکاری your_bucketname لە concat("/file/your_bucketname",http.request.uri.path) بکە بۆ ناوی سەتڵەکەت.

سەرەڕای ئەوەش، لە یاسای گۆڕینی cloudflare لە سەرەوە، index.html دەگۆڕدرێت بۆ file/your_bucketname/index.html ، و ڕێکخستنەکانی تر وەک خۆیان دەمێننەوە.