Optimización Motor De Búsqueda (Seo) Rehegua .

Principio Rehegua

i18n.site oadopta peteĩ arquitectura página peteĩva noñembopyahúiva Ikatu hag̃uáicha oñembohape indexación jeheka rehegua, ojejapóta peteĩ página estática ha sitemap.xml añónte umi rastreador-kuérape g̃uarã.

Oipurúramo User-Agent jeikerã jerure rehegua rastreador motor de búsqueda rehegua, pe mba’ejerure ojegueraha jeýta página estática-pe 302 rupive.

Umi páhina estático-pe, eipuru link ehechauka hag̃ua joajuha opaichagua ñeꞌepyre ko páhinape, haꞌeháicha :

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

Configuración nginx Local Rehegua

Jaipyhy techapyrãramo pe archivo configuración .i18n/htm/main.yml oĩva proyecto demostración-pe

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

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

cdn:
  v:
  jsd:

Emoambue raẽ host: mba’ekuaarã yvategua nde dominio rérape, ha’eháicha xxx.com .

Upéi, i18n.site -n , ojejapóta pe página estática out/main/htm directorio-pe.

Añetehápe, ikatu avei emboguata ambue ñanduti renda ñembohekorã, haꞌeháicha eñeꞌe raẽ main ñemboheko rehe emoheñói hag̃ua .i18n/htm/dist.package.json ha .i18n/htm/dist.yml .

Upéi emongu’e i18n.site -n -c dist ikatu hag̃uáicha oñemboheko pe página estática out/dist/htm peve.

nginx ikatu oñemboguapy ojehechávo pe configuración oĩva iguýpe.

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;

# Ani remoĩ cache-pe umi script servidor mba’apoharakuéra rehegua ipukueterei
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Emohenda tiempo caché ipukuvéva ambue recurso estático-pe g̃uarã
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Emohenda mba’e vore estáticopa oipuru pe rastreador jeikeha página web-pe
  location = / {
    # $botLang
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Peteĩ páhina purupyrã ñemboheko
  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/;
  }
}

Emohenda Mba’e’oka Ñeñongatuha Ojegueraha Hag̃ua Archivo Estático

Umi archivo estático ikatu ojejapo localmente, ha katu peteĩ tape ojepuruvéva haꞌehína ojegueraha hag̃ua objeto ñeñongatuhápe.

Emoambue out oñembohekopyréva yvateve :

out:
  - s3

Upéi, emohenda ~/.config/i18n.site.yml ha emoĩ ko’ã ñemboheko :

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

Pe ñembohekorãme, emoambue i18n.site host: .i18n/htm/main.yml -pe, ikatu oñemboheko heta mbaꞌeñongatuha s3 guýpe, ha region tenda haꞌehína opcional (heta mbaꞌeñongatuha natekotevẽi omohenda ko tenda).

Upéi emongu’e i18n.site -n emoherakuã jey hag̃ua tembiapo.

Emoambue ramo ~/.config/i18n.site.yml ha emboguejyse jey, eipuru ko tembiapoukapy proyecto ypykuépe ryru’ípe emopotĩ hag̃ua ñemboguejyha caché :

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

cloudflare Ñemboheko

Dominio réra oñemohendava'ekue cloudflare

Umi Regla Conversión Rehegua

Emoĩve umi regla conversión rehegua ojehechaukaháicha ko’ápe:

Pe regla código ha’e kóicha, emoambue pe código "i18n.site" nde dominio rérape:

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

Umi Regla Caché Rehegua

Emoĩve umi regla caché rehegua kóicha:

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

Umi Regla Ojeredirigi Haguã

Emohenda umi tembiapoukapy redirección rehegua kóicha, emoambue kódigo "i18n.site" nde dominio rérape

(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 Eiporavo redirección dinámica, emoambue /en redirección rape concat("/en",http.request.uri.path,".htm") pe ñe’ẽ por defecto reipotávape umi motor de búsqueda oike.

Baidu Ñemboheko Arai Arandu Rehegua

Tekotevẽramo eme’ẽ servicio China continental-pe, ikatu reipuru Baidu Smart Cloud .

Datokuéra ojegueraha Baidu Object Storage-pe ha oñembojoaju Red de Distribución de Contenidos Baidu-pe.

Upéi ejapo script servicio edge EdgeJS pe kóicha

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
  // Ikatu emohenda ñembohovái iñakãrapu’ãva emboheko hag̃ua osëva, taha’e out.XXX = 'MSG';
})

Emboguejy Debug , upéi eñemboguejy Emoherakuã red tuichakue javeve.

Jeporu Tenondegua: Oñemosarambi Tráfico Oñemopyendáva Resolución Regional Rehe

Ome'ẽséramo servicio China continental-pe ha avei oipotáramo cloudflare tráfico internacional gratuito, ikatu oiporu DNS orekóva resolución regional.

Techapyrã cloudflare Huawei Cloud DNS

Oĩ heta trampa configuración cloudflare Ko'ápe oĩ mbovymi punto ojehechakuaava'erã :

Pe Dominio Réra Oñemohenda Ambue DNS -Pe, Mba’éichapa Ojepuruva’erã cloudflare

Ñepyrũrã embojoaju peteĩ dominio réra arbitrario cloudflare -pe, ha upéi eipuru SSL/TLS → dominio réra jeporupyre embojoaju hag̃ua dominio réra tenondegua ko dominio réra ndive.

cloudflare R2 Ndaikatúi Ojeike Peteĩ Téra Dominio Jeporupyre Rupive

Pe cloudflare R2 oñemopuꞌavaꞌekue ryepýpe ndaikatúigui ojeike peteĩ dominio réra oñembohekopyréva rupive, tekotevẽ ojepuru peteĩ mbaꞌeñongatuha mbohapýha oñemohenda hag̃ua archivo estático.

cloudflare jagueraha techapyrãramo backblaze.com

Ejapo peteĩ mba’yru backblaze.com -pe, egueraha oimeraẽva vore, eñemboguejy ehesa’ỹijo hag̃ua vore ha ehupyty dominio réra Friendly URL , ha’éva f003.backblazeb2.com ko’ápe.

Emoambue dominio réra CNAME guive f003.backblazeb2.com peve cloudflare pe ha emboguata proxy.

Emoambue cloudflare 1- SSL → modo cifrado, emohenda Full

Emoĩve pe regla conversión rehegua ojehechaukaháicha ko’ápe, emoĩ tenonderã (pe peteĩha oguereko prioridad michĩvéva):

Rewrite to eiporavo dinámico ha emoambue your_bucketname en concat("/file/your_bucketname",http.request.uri.path) nde cubo rérape.

Avei, cloudflare ñembohasa regla yvateguápe, index.html oñemoambue file/your_bucketname/index.html -pe, ha ambue ñemboheko opyta peteĩcha.