Пошукавая Аптымізацыя (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
Калі вам трэба прадастаўляць паслугі ў Кітаі, вы можаце выкарыстоўваць Baidu Smart Cloud .
Даныя загружаюцца ў Baidu Object Storage і прывязваюцца да сеткі распаўсюджвання змесціва Baidu.
Затым стварыце скрыпт у службе EdgeJS edge наступным чынам
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
і ўключыце проксі.
Змяніць cloudflare
з SSL
→ рэжым шыфравання, усталяваць Full
Дадайце правіла пераўтварэння, як паказана ніжэй, пастаўце яго першым (першае мае самы нізкі прыярытэт):
Rewrite to
выберыце дынамічны і змяніце your_bucketname
у concat("/file/your_bucketname",http.request.uri.path)
імя вашага вядра.
Акрамя таго, у прыведзеным вышэй правіле пераўтварэння cloudflare
index.html
змяняецца на file/your_bucketname/index.html
, а іншыя канфігурацыі застаюцца ранейшымі.