সার্চ ইঞ্জিন অপ্টিমাইজেশান (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 সার্ভিসে স্ক্রিপ্ট তৈরি করুন
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 স্মার্ট ক্লাউডের মাধ্যমে যেতে পারে এবং আন্তর্জাতিক ট্রাফিক 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
করা হয়েছে, এবং অন্যান্য কনফিগারেশন একই থাকবে।