Optymalizacja Wyszukiwarek (Seo)
Zasada
i18n.site
przyjmuje architekturę pojedynczej strony bez odświeżania. Aby ułatwić indeksowanie wyszukiwania, zostaną wygenerowane oddzielne strony statyczne i sitemap.xml
, które będą mogły być indeksowane przez roboty indeksujące.
Gdy robot wyszukiwarki użyje User-Agent
w żądaniu dostępu, żądanie zostanie przekierowane na stronę statyczną za pośrednictwem 302
.
Na stronach statycznych użyj link
, aby wskazać linki do różnych wersji językowych tej strony, np :
<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">
Lokalna Konfiguracja nginx
Jako przykład weź plik konfiguracyjny .i18n/htm/main.yml
z projektu demonstracyjnego
host: i18n-demo.github.io
seo: true
out:
- fs
pkg:
i: i18n.site
md: i18n.site
cdn:
v:
jsd:
Najpierw zmodyfikuj powyższą wartość host:
w nazwie domeny, np. xxx.com
.
Następnie i18n.site -n
strona statyczna zostanie wygenerowana w katalogu out/main/htm
.
Oczywiście możesz także włączyć inne pliki konfiguracyjne, na przykład najpierw odwołując się do konfiguracji main
aby utworzyć .i18n/htm/dist.package.json
i .i18n/htm/dist.yml
.
Następnie uruchom i18n.site -n -c dist
, aby strona statyczna została wygenerowana na out/dist/htm
.
nginx
można ustawić, korzystając z poniższej konfiguracji.
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;
# Nie buforuj skryptów roboczych serwera zbyt długo
location = /S.js {
add_header Cache-Control "max-age=600";
}
# Ustaw dłuższe czasy pamięci podręcznej dla innych zasobów statycznych
location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
add_header Cache-Control "max-age=999999";
}
# Ustaw plik statyczny, którego robot będzie używać jako wpisu na stronie głównej
location = / {
# Jeśli $botLang nie jest pusty, oznacza to dostęp robota i przekierowanie zgodnie z ustawioną ścieżką językową
if ($botLang) {
return 301 $botLang/flashduty.htm;
}
add_header Cache-Control "max-age=600";
rewrite ^ /index.html break;
}
# Konfiguracja aplikacji na jednej stronie
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/;
}
}
Skonfiguruj Pamięć Obiektową Do Przesyłania Plików Statycznych
Pliki statyczne można generować lokalnie, ale bardziej powszechnym podejściem jest przesłanie ich do magazynu obiektowego.
Zmodyfikuj out
skonfigurowane powyżej na :
out:
- s3
Następnie edytuj ~/.config/i18n.site.yml
i dodaj następującą konfigurację :
site:
i18n.site:
s3:
- endpoint: s3.eu-central-003.backblazeb2.com
ak: # access key
sk: # secret key
bucket: # bucket name
# region:
W konfiguracji zmień i18n.site
na wartość host:
w .i18n/htm/main.yml
, pod s3
można skonfigurować wiele magazynów obiektów, a pole region
jest opcjonalne (wiele magazynów obiektów nie musi ustawiać tego pola).
Następnie uruchom i18n.site -n
, aby ponownie opublikować projekt.
Jeśli zmodyfikowałeś ~/.config/i18n.site.yml
i chcesz przesłać ponownie, użyj następującego polecenia w katalogu głównym projektu, aby wyczyścić pamięć podręczną przesyłania :
rm -rf .i18n/data/seo .i18n/data/public
Konfiguracja cloudflare
Nazwa domeny hostowana w cloudflare
Zasady Konwersji
Dodaj reguły konwersji, jak pokazano poniżej:
Kod reguły jest następujący. Zmodyfikuj kod „i18n.site” w nazwie swojej domeny:
(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")
)
Reguły Buforowania
Dodaj reguły pamięci podręcznej w następujący sposób:
(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")
Reguły Przekierowań
Ustaw reguły przekierowania w następujący sposób, zmodyfikuj kod "i18n.site" na nazwę swojej domeny
(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
Wybierz przekierowanie dynamiczne. Zmodyfikuj /en
w ścieżce przekierowania concat("/en",http.request.uri.path,".htm")
na domyślny język, który chcesz uwzględnić w wyszukiwarkach.
Inteligentna Konfiguracja Chmury Baidu
Jeśli chcesz świadczyć usługi do Chin kontynentalnych, możesz skorzystać z Baidu Smart Cloud .
Dane są przesyłane do Baidu Object Storage i łączone z siecią dystrybucji treści Baidu.
Następnie utwórz skrypt w usłudze EdgeJS Edge w następujący sposób
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
// Możesz ustawić nagłówek odpowiedzi, aby debugować dane wyjściowe, na przykład out.XXX = 'MSG';
})
Kliknij Debug
, a następnie kliknij Publikuj w całej sieci.
Zaawansowane Użycie: Dystrybuuj Ruch W Oparciu O Rozdzielczość Regionalną
Jeśli chcesz świadczyć usługi w Chinach kontynentalnych i jednocześnie chcesz mieć cloudflare
bezpłatnego ruchu międzynarodowego, możesz użyć DNS
z rozdzielczością regionalną.
Na przykład Huawei Cloud DNS zapewnia bezpłatną analizę regionalną, dzięki której ruch z Chin kontynentalnych może przechodzić przez Baidu Smart Cloud, a ruch międzynarodowy może przechodzić przez cloudflare
.
Konfiguracja cloudflare
wiąże się z wieloma pułapkami. Oto kilka punktów, na które warto zwrócić uwagę :
Nazwa Domeny Jest Hostowana W Innym DNS
, Jak Używać cloudflare
Najpierw powiąż dowolną nazwę domeny z cloudflare
, a następnie użyj SSL/TLS
→ niestandardowej nazwy domeny, aby powiązać główną nazwę domeny z tą nazwą domeny.
cloudflare R2
Nie Można Uzyskać Dostępu Za Pośrednictwem Niestandardowej Nazwy Domeny
Ponieważ do cloudflare
pamięci obiektowej R2
nie można uzyskać dostępu za pomocą dostosowanej nazwy domeny, do umieszczania plików statycznych należy użyć pamięci obiektowej innej firmy.
Tutaj bierzemy backblaze.com jako przykład, aby zademonstrować, jak powiązać obiekty innych firm, które mają być przechowywane w cloudflare
.
Utwórz segment w backblaze.com
, prześlij dowolny plik, kliknij, aby przeglądać plik i uzyskaj nazwę domeny Friendly URL
, czyli tutaj f003.backblazeb2.com
.
Zmień nazwę domeny z CNAME
na f003.backblazeb2.com
przy cloudflare
i włącz serwer proxy.
Zmodyfikuj cloudflare
z SSL
→ tryb szyfrowania, ustaw na Full
Dodaj regułę konwersji jak pokazano poniżej, umieść ją na pierwszym miejscu (pierwsza ma najniższy priorytet):
Rewrite to
wybierz dynamiczny i zmodyfikuj your_bucketname
w concat("/file/your_bucketname",http.request.uri.path)
do nazwy swojego wiadra.
Ponadto w powyższej regule konwersji cloudflare
, index.html
zostaje zmienione na file/your_bucketname/index.html
, a inne konfiguracje pozostają takie same.