शोध इंजिन ऑप्टिमायझेशन (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 मूल्य host: मधील .i18n/htm/main.yml मध्ये बदला, एकाधिक ऑब्जेक्ट स्टोअर 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 मध्ये सुधारणा करा ज्यामध्ये तुम्हाला शोध इंजिन समाविष्ट करायचे आहे.

Baidu इंटेलिजेंट क्लाउड कॉन्फिगरेशन

तुम्हाला मुख्य भूमी चीनला सेवा पुरवायची असल्यास, तुम्ही Baidu Smart Cloud वापरू शकता.

डेटा Baidu ऑब्जेक्ट स्टोरेजवर अपलोड केला जातो आणि Baidu सामग्री वितरण नेटवर्कशी बांधला जातो.

नंतर खालीलप्रमाणे EdgeJS 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 वापरू शकता.

उदाहरणार्थ, Huawei DNS विनामूल्य प्रादेशिक विश्लेषण प्रदान करते, ज्यासह मुख्य भूप्रदेश चीनी रहदारी Baidu Smart Cloud द्वारे जाऊ शकते आणि आंतरराष्ट्रीय रहदारी 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 वर बदला आणि प्रॉक्सी सक्षम करा.

SSL पैकी cloudflare → एन्क्रिप्शन मोड सुधारित करा, Full वर सेट करा

खाली दर्शविल्याप्रमाणे रूपांतरण नियम जोडा, प्रथम ठेवा (पहिल्याला सर्वात कमी प्राधान्य आहे):

Rewrite to डायनॅमिक निवडा आणि तुमच्या बादलीच्या नावात concat("/file/your_bucketname",http.request.uri.path) मध्ये your_bucketname बदला.

याव्यतिरिक्त, वरील cloudflare रूपांतरण नियमामध्ये, index.html file/your_bucketname/index.html मध्ये बदलला आहे आणि इतर कॉन्फिगरेशन समान राहतील.