सर्च इंजन अनुकूलन (एसईओ) २.

सिद्धांत

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 .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 गतिशील पुनर्निर्देशन चुनू, कृपया पुनर्निर्देशन पथ concat("/en",http.request.uri.path,".htm") मे /en ओहि पूर्वनिर्धारित भाषा मे संशोधित करू जकरा अहाँ खोज इंजन केँ शामिल करय चाहैत छी.

बैडू बुद्धिमान बादल विन्यास

अगर अहां के मुख्य भूमि चीन के सेवा देबय के जरूरत अछि तं अहां बैडू स्मार्ट क्लाउड के इस्तेमाल क सकय छी.

डाटा बैडू ऑब्जेक्ट स्टोरेज मे अपलोड कैल जायत छै आ बैडू कंटेंट डिस्ट्रीब्यूशन नेटवर्क सं बान्हल जायत छै.

तखन 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 पर क्लिक करू, फेर पूरा नेटवर्क पर प्रकाशित करू पर क्लिक करू.

उन्नत उपयोग : क्षेत्रीय संकल्प कें आधार पर यातायात वितरित करनाय

यदि अहां मुख्य भूमि चीन मे सेवा प्रदान करय चाहय छी आ cloudflare मुफ्त अंतर्राष्ट्रीय यातायात सेहो चाहैत छी त अहां क्षेत्रीय संकल्प के संग DNS उपयोग क सकय छी.

उदाहरण के लेल, हुवावे DNS मुफ्त क्षेत्रीय विश्लेषण प्रदान करैत अछि, जकर संग मुख्य भूमि चीनी यातायात बैडू स्मार्ट क्लाउड के माध्यम सं जा सकैत अछि, आ अंतर्राष्ट्रीय यातायात cloudflare के माध्यम सं जा सकैत अछि.

cloudflare के विन्यास में बहुत रास जाल अछि.. एतय किछु बिन्दु पर ध्यान देबय के अछि :

डोमेन नाम अन्य DNS मे होस्ट कएल गेल अछि , cloudflare उपयोग कोना कएल जाए

पहिने एकटा मनमाना डोमेन नाम कें cloudflare सं बाइंड करू, आओर फेर SSL/TLS → कस्टम डोमेन नाम कें उपयोग करू जे मुख्य डोमेन नाम कें एहि डोमेन नाम सं जोड़ सकय.

cloudflare R2 कस्टम डोमेन नाम क माध्यम स एक्सेस नहि कएल जा सकैत अछि

चूँकि cloudflare वस्तु भंडारण R2 अनुकूलित डोमेन नाम सं एक्सेस नहि कैल जा सकय छै, स्थिर फाइल रखय कें लेल तृतीय-पक्ष वस्तु भंडारण कें उपयोग करय कें जरूरत छै.

एतय cloudflare backblaze.com

backblaze.com पर एकटा बाल्टी बनाउ, कोनो फाइल अपलोड करू, फाइल ब्राउज करबाक लेल क्लिक करू, आओर Friendly URL क डोमेन नाम प्राप्त करू, जे एतय f003.backblazeb2.com अछि.

डोमेन नाम cloudflare पर CNAME सँ f003.backblazeb2.com मे बदलू आओर प्रॉक्सी सक्षम करू.

SSL मे सँ cloudflare संशोधित करू → एन्क्रिप्शन मोड, Full पर सेट करू

रूपांतरण नियम जोड़ू जेना कि नीचाँ देखाओल गेल अछि, ओकरा पहिने राखू (पहिल केर प्राथमिकता सबसँ कम अछि):

Rewrite to डायनामिक चुनू आओर concat("/file/your_bucketname",http.request.uri.path) मे your_bucketname अपन बाल्टी नाम मे संशोधित करू.

एकरऽ अलावा, उपरोक्त cloudflare रूपांतरण नियम म॑, index.html file/your_bucketname/index.html म॑ बदललऽ जाय छै, आरू अन्य विन्यास वू ही रहै छै.