Search Engine Optimization (Seo)
Prinsipyo
i18n.site
ay gumagamit ng isang hindi nagre-refresh na arkitektura ng solong pahina Upang mapadali ang pag-index ng paghahanap, isang hiwalay na static na pahina at sitemap.xml
ay bubuo para sa mga crawler na mag-crawl.
Kapag User-Agent
ng kahilingan sa pag-access ay ginamit ng crawler ng search engine, ang kahilingan ay ire-redirect sa static na pahina sa pamamagitan ng 302
.
Sa mga static na pahina, gumamit link
upang ipahiwatig ang mga link sa iba't ibang bersyon ng wika ng pahinang ito, tulad ng :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Lokal Na Pagsasaayos Ng nginx
Kunin ang .i18n/htm/main.yml
configuration file sa demo project bilang isang halimbawa
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Mangyaring baguhin muna ang halaga ng host:
sa itaas sa iyong domain name, gaya ng xxx.com
.
Pagkatapos, i18n.site -n
, ang static na pahina ay bubuo sa out/main/htm
direktoryo.
Siyempre, maaari mo ring paganahin ang iba pang mga configuration file, tulad ng unang pagtukoy sa configuration ng main
upang lumikha .i18n/htm/dist.package.json
at .i18n/htm/dist.yml
.
Pagkatapos ay patakbuhin i18n.site -n -c dist
upang ang static na pahina ay mabuo sa out/dist/htm
.
nginx
ay maaaring itakda sa pamamagitan ng pagsangguni sa configuration sa ibaba.
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;
# Huwag i-cache ang mga script ng manggagawa ng server nang masyadong mahaba
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Magtakda ng mas mahabang oras ng cache para sa iba pang mga static na mapagkukunan
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Itakda kung aling static na file ang ginagamit ng crawler bilang entry sa homepage
location = / {
# Kung walang laman ang $botLang , nangangahulugan ito ng pag-access at pag-redirect ng crawler ayon sa nakatakdang landas ng wika
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Isang pahinang pagsasaayos ng application
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/;
}
}
I-Configure Ang Object Storage Para Sa Pag-Upload Ng Mga Static Na File
Ang mga static na file ay maaaring mabuo nang lokal, ngunit ang isang mas karaniwang diskarte ay ang pag-upload ng mga ito sa object storage.
Baguhin out
na na-configure sa itaas sa :
out:
- s3
Pagkatapos, i-edit ang ~/.config/i18n.site.yml
at idagdag ang sumusunod na configuration :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
Sa pagsasaayos, mangyaring baguhin i18n.site
sa halaga ng host:
sa .i18n/htm/main.yml
, maaaring i-configure ang maraming object store sa ilalim ng s3
, at opsyonal ang region
na field (maraming object store ang hindi kailangang itakda ang field na ito).
Pagkatapos ay patakbuhin i18n.site -n
upang muling i-publish ang proyekto.
Kung binago mo ~/.config/i18n.site.yml
at nais mong muling i-upload, mangyaring gamitin ang sumusunod na command sa direktoryo ng ugat ng proyekto upang i-clear ang cache ng pag-upload :
rm -rf .i18n/data/seo .i18n/data/public
Configuration Ng cloudflare
Ang domain name ay naka-host sa cloudflare
Mga Panuntunan Sa Conversion
Idagdag ang mga panuntunan sa conversion tulad ng ipinapakita sa ibaba:
Ang code ng panuntunan ay ang mga sumusunod, mangyaring baguhin ang code na "i18n.site" sa iyong domain name:
(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")
)
Mga Panuntunan Sa Pag-Cache
Magdagdag ng mga panuntunan sa cache tulad ng sumusunod:
(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")
Mga Panuntunan Sa Pag-Redirect
Itakda ang mga panuntunan sa pag-redirect bilang mga sumusunod, mangyaring baguhin ang code na "i18n.site" sa iyong domain name
(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
Pumili ng dynamic na redirection, mangyaring baguhin /en
sa redirection path concat("/en",http.request.uri.path,".htm")
sa default na wika na gusto mong isama ng mga search engine.
Baidu Intelligent Cloud Configuration
Kung kailangan mong magbigay ng mga serbisyo sa mainland China, maaari mong gamitin ang Baidu Smart Cloud .
Ang data ay ina-upload sa Baidu Object Storage at nakatali sa Baidu Content Distribution Network.
Pagkatapos ay lumikha ng script sa EdgeJS edge na serbisyo tulad ng sumusunod
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
// Maaaring itakda ang mga header ng tugon upang i-debug ang output, gaya ng out.XXX = 'MSG';
})
I-click ang Debug
, pagkatapos ay i-click ang I-publish sa buong network.
Advanced Na Paggamit: Ipamahagi Ang Trapiko Batay Sa Rehiyonal Na Resolusyon
Kung gusto mong magbigay ng mga serbisyo sa mainland China at gusto mo rin cloudflare
libreng internasyonal na trapiko, maaari mong gamitin DNS
na may regional resolution.
Halimbawa cloudflare
nagbibigay ang Huawei Cloud DNS
Mayroong maraming mga pitfalls sa pagsasaayos ng cloudflare
Narito ang ilang mga punto na dapat tandaan :
Ang Domain Name Ay Naka-Host Sa Ibang DNS
, Kung Paano Gamitin cloudflare
Una, itali ang isang arbitrary na domain name sa cloudflare
, at pagkatapos ay gamitin SSL/TLS
→ custom na domain name upang iugnay ang pangunahing domain name sa domain name na ito.
cloudflare R2
Ay Hindi Ma-Access Sa Pamamagitan Ng Custom Na Domain Name
Dahil ang built cloudflare
in na object storage R2
ay hindi ma-access ng customized na domain name, kailangang gumamit ng third-party na object storage para maglagay ng mga static na file.
Dito namin kinuha backblaze.com bilang isang halimbawa upang ipakita kung paano i-bind ang mga third-party na bagay na iimbak sa cloudflare
.
Gumawa ng bucket sa backblaze.com
, mag-upload ng anumang file, i-click upang i-browse ang file, at makuha ang domain name ng Friendly URL
, na f003.backblazeb2.com
dito.
Baguhin ang domain name mula CNAME
hanggang f003.backblazeb2.com
sa cloudflare
at paganahin ang proxy.
Baguhin cloudflare
ng SSL
→ encryption mode, itakda sa Full
Idagdag ang panuntunan sa conversion tulad ng ipinapakita sa ibaba, unahin ito (ang una ang may pinakamababang priyoridad):
Rewrite to
piliin ang dynamic at baguhin your_bucketname
sa concat("/file/your_bucketname",http.request.uri.path)
sa pangalan ng iyong bucket.
Bilang karagdagan, sa cloudflare
na panuntunan sa conversion sa itaas, index.html
ay binago sa file/your_bucketname/index.html
, at ang iba pang mga configuration ay nananatiling pareho.