Optimización De Buscadores (Seo)

Principio

i18n.site adopta unha arquitectura de páxina única non actualizada Para facilitar a indexación da busca, xerarase unha páxina estática separada e sitemap.xml para que os rastrexadores poidan rastrexar.

Cando o rastrexador do motor de busca utiliza User-Agent da solicitude de acceso, a solicitude redirixirase á páxina estática a través de 302 .

Nas páxinas estáticas, use link para indicar ligazóns a diferentes versións lingüísticas desta páxina, como :

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

Configuración Local De nginx

Tome o ficheiro de configuración .i18n/htm/main.yml no proxecto de demostración como exemplo

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

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

cdn:
  v:
  jsd:

Primeiro modifica o valor de host: anterior para o teu nome de dominio, como xxx.com .

Entón, i18n.site -n , xerarase a páxina estática no directorio out/main/htm .

Por suposto, tamén pode activar outros ficheiros de configuración, como facer referencia primeiro á configuración de main para crear .i18n/htm/dist.package.json e .i18n/htm/dist.yml .

A continuación, executa i18n.site -n -c dist para que a páxina estática se xere a out/dist/htm .

nginx pódese establecer facendo referencia á configuración a continuación.

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;

# Non garde en caché os scripts dos traballadores do servidor durante moito tempo
  location = /S.js {
    add_header Cache-Control "max-age=600";
  }

# Establece tempos de caché máis longos para outros recursos estáticos
  location ~* \.(js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest)$ {
    add_header Cache-Control "max-age=999999";
  }

# Establece que ficheiro estático utiliza o rastrexador como entrada da páxina de inicio
  location = / {
    # Se $botLang non está baleiro, significa o acceso do rastrexador e a redirección segundo a ruta do idioma establecido
    if ($botLang) {
        return 301 $botLang/flashduty.htm;
    }
    add_header Cache-Control "max-age=600";
    rewrite ^ /index.html break;
  }

# Configuración da aplicación dunha soa páxina
  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/;
  }
}

Configure O Almacenamento De Obxectos Para Cargar Ficheiros Estáticos

Os ficheiros estáticos pódense xerar localmente, pero un enfoque máis común é cargalos ao almacenamento de obxectos.

Modifica out configurado anteriormente para :

out:
  - s3

A continuación, edita ~/.config/i18n.site.yml e engade a seguinte configuración :

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

Na configuración, cambie i18n.site ao valor de host: en .i18n/htm/main.yml , pódense configurar varios almacéns de obxectos en s3 e o campo region é opcional (moitos almacéns de obxectos non precisan configurar este campo).

A continuación, executa i18n.site -n para volver publicar o proxecto.

Se modificaches ~/.config/i18n.site.yml e queres volver cargar, utiliza o seguinte comando no directorio raíz do proxecto para limpar a caché de carga :

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

Configuración De cloudflare

Nome de dominio aloxado en cloudflare

Regras De Conversión

Engade as regras de conversión como se mostra a continuación:

O código de regra é o seguinte, modifica o código "i18n.site" ao teu nome de dominio:

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

Regras De Almacenamento en Caché

Engade regras de caché do seguinte xeito:

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

Regras De Redirección

Establece as regras de redirección do seguinte xeito, modifica o código "i18n.site" ao teu nome de dominio

(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 Seleccione a redirección dinámica, modifique /en na ruta de redirección concat("/en",http.request.uri.path,".htm") ao idioma predeterminado que desexa que inclúan os motores de busca.

Configuración Intelligent Cloud De Baidu

Se precisas ofrecer servizos á China continental, podes usar Baidu Smart Cloud .

Os datos cárganse no Almacenamento de obxectos de Baidu e engádense á rede de distribución de contidos de Baidu.

A continuación, cree o script no servizo EdgeJS do seguinte xeito

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
  // As cabeceiras de resposta pódense configurar para depurar a saída, como out.XXX = 'MSG';
})

Fai clic en Debug e despois en Publicar en toda a rede.

Uso Avanzado: Distribúe O Tráfico en Función Da Resolución Rexional

Se queres ofrecer servizos na China continental e tamén queres cloudflare tráfico internacional gratuíto, podes usar DNS con resolución rexional.

Por exemplo, Huawei DNS ofrece análise rexional gratuíta, coa que o tráfico da China continental pode pasar por Baidu Smart Cloud e o tráfico internacional pode pasar por cloudflare .

Hai moitas trampas na configuración de cloudflare Aquí tes algúns puntos a ter en conta :

O Nome De Dominio Está Aloxado Noutro DNS , Como Usar cloudflare

Primeiro ligue un nome de dominio arbitrario a cloudflare , e despois use SSL/TLS → nome de dominio personalizado para asociar o nome de dominio principal a este nome de dominio.

Non Se Pode Acceder cloudflare R2 a Través Dun Nome De Dominio Personalizado

Dado que non se pode acceder ao almacenamento de obxectos cloudflare R2 mediante un nome de dominio personalizado, é necesario utilizar un almacenamento de obxectos de terceiros para colocar ficheiros estáticos.

backblaze.com tomamos como exemplo como unir obxectos de terceiros para almacenalos en cloudflare .

Crea un depósito en backblaze.com , carga calquera ficheiro, fai clic para buscar o ficheiro e obtén o nome de dominio de Friendly URL , que é f003.backblazeb2.com aquí.

Cambia o nome de dominio de CNAME a f003.backblazeb2.com en cloudflare e activa o proxy.

Modificar cloudflare de SSL → modo de cifrado, configurado en Full

Engade a regra de conversión como se mostra a continuación, colócaa primeiro (a primeira ten a prioridade máis baixa):

Rewrite to selecciona dinámico e modifica your_bucketname en concat("/file/your_bucketname",http.request.uri.path) ao teu nome de balde.

Ademais, na regra de conversión cloudflare anterior, index.html cámbiase a file/your_bucketname/index.html e outras configuracións seguen sendo as mesmas.