खोज इंजन अनुकूलन (एसईओ)
सिद्धांत
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 स्मार्ट क्लाउड का उपयोग कर सकते हैं।
डेटा को 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
उपयोग कर सकते हैं।
उदाहरण के लिए, हुआवेई DNS मुफ़्त क्षेत्रीय विश्लेषण प्रदान करता है, जिसके साथ मुख्य भूमि चीनी ट्रैफ़िक Baidu स्मार्ट क्लाउड के माध्यम से जा सकता है, और अंतर्राष्ट्रीय ट्रैफ़िक cloudflare
के माध्यम से जा सकता है।
cloudflare
के कॉन्फ़िगरेशन में कई खामियां हैं। यहां ध्यान देने योग्य कुछ बिंदु दिए गए हैं :
डोमेन नाम अन्य DNS
में होस्ट किया गया है, cloudflare
उपयोग कैसे करें
पहले एक मनमाने डोमेन नाम को cloudflare
से बांधें, और फिर मुख्य डोमेन नाम को इस डोमेन नाम से जोड़ने के लिए SSL/TLS
→ कस्टम डोमेन नाम का उपयोग करें।
cloudflare R2
कस्टम डोमेन नाम के माध्यम से एक्सेस नहीं किया जा सकता है
क्योंकि cloudflare
ऑब्जेक्ट स्टोरेज R2
अनुकूलित डोमेन नाम द्वारा एक्सेस नहीं किया जा सकता है, स्थिर फ़ाइलों को रखने के लिए एक तृतीय-पक्ष ऑब्जेक्ट स्टोरेज का उपयोग करने की आवश्यकता होती है।
यहां हम यह दिखाने के लिए एक उदाहरण के रूप में backblaze.com लेते हैं कि cloudflare
पर संग्रहीत किए जाने वाले तृतीय-पक्ष ऑब्जेक्ट को कैसे बांधा जाए।
backblaze.com
पर एक बकेट बनाएं, कोई भी फ़ाइल अपलोड करें, फ़ाइल ब्राउज़ करने के लिए क्लिक करें, और Friendly URL
का डोमेन नाम प्राप्त करें, जो यहां f003.backblazeb2.com
है।
cloudflare
पर डोमेन नाम को CNAME
से f003.backblazeb2.com
में बदलें और प्रॉक्सी को सक्षम करें।
SSL
में से cloudflare
संशोधित करें → एन्क्रिप्शन मोड, Full
पर सेट करें
जैसा कि नीचे दिखाया गया है, रूपांतरण नियम जोड़ें, इसे पहले रखें (पहले वाले की प्राथमिकता सबसे कम है):
Rewrite to
डायनामिक का चयन करें और अपने बकेट नाम में your_bucketname
इन concat("/file/your_bucketname",http.request.uri.path)
संशोधित करें।
इसके अलावा, उपरोक्त cloudflare
रूपांतरण नियम में, index.html
को file/your_bucketname/index.html
में बदल दिया गया है, और अन्य कॉन्फ़िगरेशन समान रहते हैं।