अन्वेषणयन्त्र अनुकूलनम् (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
निर्देशिकायां स्थिरपृष्ठं उत्पद्यते ।
अवश्यं, अन्यविन्याससञ्चिकाः अपि सक्षमाः कर्तुं शक्नुवन्ति, यथा प्रथमं 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")
)
Caching नियमाः
सञ्चयनियमाः निम्नलिखितरूपेण योजयन्तु ।
(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 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
उपयोगं कर्तुं शक्नोति।
उदाहरणार्थं cloudflare
Huawei Cloud DNS
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
इति परिवर्तते, अन्ये विन्यासाः अपि तथैव तिष्ठन्ति ।