זוכן ענגינע אָפּטימיזאַטיאָן (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 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
  // ענטפער כעדערז קענען זיין באַשטימט צו דיבאַג רעזולטאַט, אַזאַ ווי אָוט.קסקסקס = 'מסג';
})

דריקט Debug , דעמאָלט גיט אַרויסגעבן צו די גאנצע נעץ.

אַוואַנסירטע באַניץ: פאַרשפּרייטן פאַרקער באזירט אויף רעגיאָנאַל האַכלאָטע

אויב איר ווילן צו צושטעלן באַדינונגס אין יאַבאָשע טשיינאַ און אויך ווילן cloudflare פריי אינטערנאַציאָנאַלע פאַרקער, איר קענען נוצן DNS מיט רעגיאָנאַל האַכלאָטע.

פֿאַר בייַשפּיל, Huawei 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 , און אנדערע קאַנפיגיעריישאַנז בלייבן די זעלבע.