אופטימיזציה למנועי חיפוש (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
שם דומיין מתארח אצל 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 Intelligent Cloud Configuration
אם אתה צריך לספק שירותים לסין היבשתית, אתה יכול להשתמש ב- 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
ברזולוציה אזורית.
לדוגמה, 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
והפעל את ה-proxy.
שנה cloudflare
מתוך SSL
→ מצב הצפנה, מוגדר ל Full
הוסף את כלל ההמרה כפי שמוצג להלן, שים אותו קודם (לראשון יש את העדיפות הנמוכה ביותר):
Rewrite to
בחר דינמי ושנה your_bucketname
ב concat("/file/your_bucketname",http.request.uri.path)
לשם הדלי שלך.
בנוסף, בכלל ההמרה cloudflare
לעיל, index.html
משתנה ל file/your_bucketname/index.html
ותצורות אחרות נשארות זהות.