ਖੋਜ ਇੰਜਨ ਔਪਟੀਮਾਈਜੇਸ਼ਨ (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 ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਤਿਆਰ ਕੀਤਾ ਜਾਵੇਗਾ।

ਬੇਸ਼ੱਕ, ਤੁਸੀਂ ਹੋਰ ਸੰਰਚਨਾ ਫਾਈਲਾਂ ਨੂੰ ਵੀ ਸਮਰੱਥ ਕਰ ਸਕਦੇ ਹੋ, ਜਿਵੇਂ ਕਿ ਪਹਿਲਾਂ .i18n/htm/dist.package.json ਅਤੇ .i18n/htm/dist.yml ਬਣਾਉਣ ਲਈ main ਦੀ ਸੰਰਚਨਾ ਦਾ ਹਵਾਲਾ ਦੇਣਾ।

ਫਿਰ 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 .i18n/htm/main.yml ਵਿੱਚ host: ਦੇ ਮੁੱਲ ਵਿੱਚ ਬਦਲੋ, ਮਲਟੀਪਲ ਆਬਜੈਕਟ ਸਟੋਰਾਂ ਨੂੰ 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 ਗਤੀਸ਼ੀਲ ਰੀਡਾਇਰੈਕਸ਼ਨ ਦੀ ਚੋਣ ਕਰੋ, ਕਿਰਪਾ ਕਰਕੇ ਰੀਡਾਇਰੈਕਸ਼ਨ ਮਾਰਗ concat("/en",http.request.uri.path,".htm") ਵਿੱਚ /en ਡਿਫੌਲਟ ਭਾਸ਼ਾ ਵਿੱਚ ਸੰਸ਼ੋਧਿਤ ਕਰੋ ਜਿਸਨੂੰ ਤੁਸੀਂ ਖੋਜ ਇੰਜਣ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ।

Baidu ਇੰਟੈਲੀਜੈਂਟ ਕਲਾਊਡ ਕੌਂਫਿਗਰੇਸ਼ਨ

ਜੇਕਰ ਤੁਹਾਨੂੰ ਮੁੱਖ ਭੂਮੀ ਚੀਨ ਨੂੰ ਸੇਵਾਵਾਂ ਪ੍ਰਦਾਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ, ਤਾਂ ਤੁਸੀਂ Baidu Smart Cloud ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ।

ਡਾਟਾ Baidu ਵਸਤੂ ਸਟੋਰੇਜ਼ 'ਤੇ ਅੱਪਲੋਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ Baidu ਸਮੱਗਰੀ ਵੰਡ ਨੈੱਟਵਰਕ ਨਾਲ ਬੰਨ੍ਹਿਆ ਜਾਂਦਾ ਹੈ।

ਫਿਰ ਹੇਠ ਲਿਖੇ ਅਨੁਸਾਰ 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 ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ।

ਉਦਾਹਰਨ ਲਈ, ਹੁਆਵੇਈ DNS ਮੁਫ਼ਤ ਖੇਤਰੀ ਵਿਸ਼ਲੇਸ਼ਣ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਮੁੱਖ ਭੂਮੀ ਚੀਨੀ ਟ੍ਰੈਫਿਕ Baidu ਸਮਾਰਟ ਕਲਾਊਡ ਰਾਹੀਂ ਜਾ ਸਕਦਾ ਹੈ, ਅਤੇ ਅੰਤਰਰਾਸ਼ਟਰੀ ਆਵਾਜਾਈ 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 ਤੇ ਬਦਲੋ ਅਤੇ ਪ੍ਰੌਕਸੀ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ।

SSL ਵਿੱਚੋਂ cloudflare ਸੋਧੋ → ਇਨਕ੍ਰਿਪਸ਼ਨ ਮੋਡ, Full ਤੇ ਸੈੱਟ ਕਰੋ

ਹੇਠਾਂ ਦਰਸਾਏ ਅਨੁਸਾਰ ਰੂਪਾਂਤਰਨ ਨਿਯਮ ਸ਼ਾਮਲ ਕਰੋ, ਇਸਨੂੰ ਪਹਿਲਾਂ ਰੱਖੋ (ਪਹਿਲੇ ਦੀ ਸਭ ਤੋਂ ਘੱਟ ਤਰਜੀਹ ਹੈ):

Rewrite to ਡਾਇਨਾਮਿਕ ਚੁਣੋ ਅਤੇ ਆਪਣੇ ਬਾਲਟੀ ਨਾਮ ਵਿੱਚ concat("/file/your_bucketname",http.request.uri.path) ਵਿੱਚ your_bucketname ਨੂੰ ਸੋਧੋ।

ਇਸ ਤੋਂ ਇਲਾਵਾ, ਉਪਰੋਕਤ cloudflare ਪਰਿਵਰਤਨ ਨਿਯਮ ਵਿੱਚ, index.html ਨੂੰ file/your_bucketname/index.html ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ ਹੈ, ਅਤੇ ਹੋਰ ਸੰਰਚਨਾਵਾਂ ਉਹੀ ਰਹਿੰਦੀਆਂ ਹਨ।