Search Engine Optimization (Seo)

Principium

i18n.site una pagina architectura non reficit. Ut faciliorem indicens investigationem, paginam static separatam et sitemap.xml generabitur pro reptans ad repere.

Cum User-Agent accessus petitionis adhibeatur per quaero engine trahens, petitio ad paginam static per 302 convertetur.

In paginis staticis, link utere ad indicandas nexus ad varias linguas huius paginae versiones, quales sunt :

<link rel=alternate hreflang=zh href="https://i18n.site/zh/.htm">
<link rel=alternate hreflang=en href="https://i18n.site/en/.htm">

Locus nginx Configuratione

Accipe .i18n/htm/main.yml configuration file in demo project exemplum

host: i18n-demo.github.io
seo: true
out:
  - fs

pkg:
  i: i18n.site
  md: i18n.site

cdn:
  v:
  jsd:

Quaeso, primum valorem host: supra ad nomen tuum domain modifica, ut xxx.com .

Tunc, i18n.site -n , pagina static generabitur in out/main/htm directorio.

Utique, alias tabellas conformationis efficere potes, ut primum de configuratione main creare .i18n/htm/dist.package.json et .i18n/htm/dist.yml referas.

Tunc curre i18n.site -n -c dist ut pagina static generabitur ad out/dist/htm .

nginx exponi potest referendo ad configurationem infra.

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;

# Noli custodire scriptorem operarium pro nimis diu
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Longius cache temporibus aliis static opibus
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Pone quod static file ad crawler uti protocollum ingressu
  location = / {
    # Si $botLang
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Una pagina applicationem configuratione
  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/;
  }
}

Configurare Object Repono Pro Imposuisti Static Files

Tabulae staticae localiter generari possunt, sed communior accessus est eas in tabulas repositas imponere.

Modificare out figuram supra ad :

out:
  - s3

Deinde, ~/.config/i18n.site.yml edite et sequentem configurationem adde :

site:
  i18n.site:
    s3:
      - endpoint: s3.eu-central-003.backblazeb2.com
        ak: # access key
        sk: # secret key
        bucket: # bucket name
        # region:

In schemate, quaeso i18n.site in valorem host: in .i18n/htm/main.yml mutare, multae obiecti copiae sub s3 configurari possunt, et region campus ad libitum (multi thesauri obiecti non indigent ut hunc agrum constituant).

Tunc currite i18n.site -n ad res publicandas.

Si modificatio ~/.config/i18n.site.yml et vis ad re-inpositionem, quaeso utere sequenti imperio in directorio radicis projecti ad purgandum cache onerationis :

rm -rf .i18n/data/seo .i18n/data/public

Nubemflare Configuratione

Domain name hosted to cloudflare

Conversio Praecepta

Adde regulas conversionis ut infra:

Regula Codicis talis est, quaeso, codicem "i18n.site" ad nomen domain tuum mutare:

(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")
)

Caching Praecepta

Addere cache praecepta haec sunt:

(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")

Redirect Praecepta

Praecepta directio constitue ut sequitur, codicem "i18n.site" mutare ad nomen tuum domain

(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 Select dynamicam redirectionem, quaeso /en in redirectionem mutare viam concat("/en",http.request.uri.path,".htm") ad linguam default quam vis investigationum machinarum includere.

Baidu Intelligent Cloud Configurationis

Si officia in continenti Sinis praebere debes, Baidu Smart Cloud uti potes.

Data est obiecta Baidu Objectum Repono et tenetur ad Baidu Content Distributio Network.

Tunc creare scriptum in EdgeJS muneris ut sequitur

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
  // Potes responsionem header ad output debug, ut out.XXX = 'MSG';
})

Preme Debug , deprime Retiacula integra ad publicandum.

Provectus Usus: Distribue Negotiationis Secundum Resolutionem Regionalem

Si officia in continenti Sinis praebere vis ac etiam cloudflare negotiatio internationalis libera, DNS cum resolutione regionali uti potes.

Exempli gratia, DNS Cloud liberam praebet analysin regionalem, cum qua continenti Seres negotiatio per Baidu Smart Cloud ire potest, et negotiatio internationalis per cloudflare ire potest.

Multae insidiae in schemate de cloudflare Hic pauca notanda sunt :

Nomen Domain Nomen Est in Aliis DNS , Uti cloudflare

Primum nomen dominii arbitrarium obligare ad cloudflare , ac deinde uti SSL/TLS → consuetudo domain nomen ut principale nomen domain nomen huic regioni adiungat.

cloudflare R2 Non Potest Accessed Per Consuetudinem Domain Nomen

Quia constructum cloudflare in repositione repositione R2 adiri non potest a nativus domain nomen, tertia pars obiecti repositionis necessario ad tabularia stataria collocanda.

backblaze.com sumimus in exemplum demonstrandi quomodo ligandi res tertiae partis in cloudflare recondenda sint.

Situlam in backblaze.com crea, fasciculum quemlibet impone, preme ut tabellam browse, et nomen regio Friendly URL obtine, quod hic f003.backblazeb2.com est.

Mutare nomen dominii ab CNAME ad f003.backblazeb2.com ad cloudflare et procuratorem praesta.

Modificare cloudflare de SSL → encryption modus, pone ad Full

Regulam conversionis adde, ut infra patebit, illud primo (primum habet infimum prioritatem);

Rewrite to eligere dynamicam et modificare your_bucketname in concat("/file/your_bucketname",http.request.uri.path) ad situlam nomini tuo.

Praeterea in regula cloudflare conversionis supra, index.html mutatur ad file/your_bucketname/index.html , et aliae figurationes eadem manent.