खोज इन्जिन अप्टिमाइजेसन (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 कन्फिगरेसन

डोमेन नाम मा होस्ट गरियो 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 वस्तु भण्डारणमा अपलोड गरिएको छ र Baidu सामग्री वितरण नेटवर्कमा बाँधिएको छ।

त्यसपछि निम्न रूपमा 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 प्रयोग गर्न सक्नुहुन्छ।

उदाहरणका लागि, Huawei Cloud DNS नि:शुल्क क्षेत्रीय विश्लेषण प्रदान गर्दछ, जसको साथमा मुख्य भूमि चिनियाँ ट्राफिक 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 मा परिवर्तन गरिएको छ, र अन्य कन्फिगरेसनहरू उस्तै छन्।