تحسين محركات البحث (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
إلى القيمة 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
حدد إعادة التوجيه الديناميكي، يرجى تعديل /en
في مسار إعادة التوجيه concat("/en",http.request.uri.path,".htm")
إلى اللغة الافتراضية التي تريد أن تتضمنها محركات البحث.
بايدو التكوين السحابي الذكي
إذا كنت بحاجة إلى تقديم خدمات إلى البر الرئيسي للصين، فيمكنك استخدام Baidu Smart Cloud .
يتم تحميل البيانات إلى Baidu Object Storage وربطها بشبكة Baidu Content Distribution Network.
ثم قم بإنشاء البرنامج النصي في 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 Cloud تحليلًا إقليميًا مجانيًا، حيث يمكن لحركة المرور في البر الرئيسي الصيني أن تمر عبر 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
وقم بتمكين الوكيل.
تعديل cloudflare
من SSL
← وضع التشفير، اضبط على Full
أضف قاعدة التحويل كما هو موضح أدناه، ضعها أولاً (الأولى لها الأولوية الأدنى):
Rewrite to
حدد ديناميكيًا وقم بتعديل your_bucketname
في concat("/file/your_bucketname",http.request.uri.path)
إلى اسم المجموعة الخاصة بك.
بالإضافة إلى ذلك، في قاعدة التحويل cloudflare
أعلاه، تم تغيير index.html
إلى file/your_bucketname/index.html
، وتبقى التكوينات الأخرى كما هي.