سرچ انجن آپٹیمائزیشن (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 ڈائریکٹری میں تیار کیا جائے گا۔

بلاشبہ، آپ دیگر کنفیگریشن فائلوں کو بھی فعال کر سکتے ہیں، جیسے کہ پہلے .i18n/htm/dist.package.json اور .i18n/htm/dist.yml بنانے کے لیے main کی کنفیگریشن کا حوالہ دینا۔

پھر 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 .i18n/htm/main.yml میں host: کی قدر میں تبدیل کریں، متعدد آبجیکٹ اسٹورز کو s3 کے تحت ترتیب دیا جا سکتا ہے، اور region فیلڈ اختیاری ہے (بہت سے آبجیکٹ اسٹورز کو اس فیلڈ کو سیٹ کرنے کی ضرورت نہیں ہے)۔

پھر پروجیکٹ کو دوبارہ شائع کرنے کے لیے i18n.site -n چلائیں۔

اگر آپ نے ~/.config/i18n.site.yml ترمیم کی ہے اور دوبارہ اپ لوڈ کرنا چاہتے ہیں، تو براہ کرم پراجیکٹ روٹ ڈائرکٹری میں درج ذیل کمانڈ کو اپ لوڈ کیشے کو صاف کرنے کے لیے استعمال کریں :

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

کلاؤڈ فلیئر کنفیگریشن

ڈومین کا نام 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 استعمال کر سکتے ہیں۔

ڈیٹا Baidu Object Storage پر اپ لوڈ کیا جاتا ہے اور Baidu Content Distribution Network سے منسلک ہوتا ہے۔

پھر اسکرپٹ کو 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
  // رسپانس ہیڈر کو ڈیبگ آؤٹ پٹ پر سیٹ کیا جا سکتا ہے، جیسے out.XXX = 'MSG';
})

Debug پر کلک کریں، پھر پورے نیٹ ورک پر شائع کریں پر کلک کریں۔

اعلی درجے کا استعمال: علاقائی ریزولوشن کی بنیاد پر ٹریفک کو تقسیم کریں۔

اگر آپ سرزمین چین میں خدمات فراہم کرنا چاہتے ہیں اور cloudflare مفت بین الاقوامی ٹریفک بھی چاہتے ہیں تو آپ علاقائی ریزولوشن کے ساتھ DNS استعمال کر سکتے ہیں۔

مثال کے طور پر، DNS Cloud مفت علاقائی تجزیہ فراہم کرتا ہے، جس کے ساتھ مین لینڈ چینی ٹریفک Baidu Smart Cloud سے گزر سکتی ہے، اور بین الاقوامی ٹریفک cloudflare سے گزر سکتی ہے۔

cloudflare کی ترتیب میں بہت سے نقصانات ہیں۔ یہاں چند نکات نوٹ کرنے کے لیے ہیں :

ڈومین کا نام دوسرے DNS میں ہوسٹ کیا جاتا ہے، cloudflare کیسے استعمال کیا جائے۔

سب سے پہلے ایک صوابدیدی ڈومین نام کو cloudflare سے باندھیں، اور پھر SSL/TLS → کسٹم ڈومین نام کا استعمال کریں تاکہ اس ڈومین نام کے ساتھ مرکزی ڈومین نام کو منسلک کریں۔

حسب ضرورت ڈومین نام کے ذریعے cloudflare R2 تک رسائی حاصل نہیں کی جا سکتی

چونکہ بلٹ cloudflare آبجیکٹ اسٹوریج R2 تک کسی حسب ضرورت ڈومین نام کے ذریعے رسائی حاصل نہیں کی جاسکتی ہے، اس لیے جامد فائلوں کو رکھنے کے لیے تھرڈ پارٹی آبجیکٹ اسٹوریج کو استعمال کرنے کی ضرورت ہے۔

یہاں ہم backblaze.com ظاہر کرنے کے لیے ایک مثال کے طور پر لیتے ہیں کہ تھرڈ پارٹی اشیاء کو کیسے باندھا جائے اور انہیں cloudflare میں اسٹور کیا جائے۔

backblaze.com پر ایک بالٹی بنائیں، کوئی بھی فائل اپ لوڈ کریں، فائل کو براؤز کرنے کے لیے کلک کریں، اور Friendly URL کا ڈومین نام حاصل کریں، جو کہ یہاں f003.backblazeb2.com ہے۔

ڈومین کا نام CNAME سے f003.backblazeb2.com میں cloudflare پر تبدیل کریں اور پراکسی کو فعال کریں۔

SSL میں سے cloudflare میں ترمیم کریں → انکرپشن موڈ، Full پر سیٹ کریں۔

تبادلوں کے اصول کو شامل کریں جیسا کہ ذیل میں دکھایا گیا ہے، اسے پہلے رکھیں (پہلے کی ترجیح سب سے کم ہے):

Rewrite to متحرک منتخب کریں اور اپنے بالٹی کے نام میں your_bucketname میں concat("/file/your_bucketname",http.request.uri.path) میں ترمیم کریں۔

اس کے علاوہ، اوپر کے cloudflare تبدیلی کے اصول میں، index.html کو file/your_bucketname/index.html میں تبدیل کر دیا گیا ہے، اور دیگر کنفیگریشنز وہی رہیں گی۔