πŸ”πŸ“Š 10 ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² SEO-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ JavaScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€

Π’Π΅Π±-прилоТСния часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ JavaScript для динамичСского создания ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Но поисковыС Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹ Π½Π΅ всСгда ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ – Π² ΠΈΡ‚ΠΎΠ³Π΅ сайт тСряСт посСтитСлСй. На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΡ‚ 10 способов SEO-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ для JavaScript.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» взят ΠΈΠ· нашСй СТСнСдСльной email-рассылки, посвящСнной Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Ρƒ. ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² числС ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ дайдТСст.

Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΈ статичСский Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³

МногиС сайты Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ JavaScript для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ отобраТСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. Однако поисковыС систСмы (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Google) Π½Π΅ всСгда ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот JavaScript-ΠΊΠΎΠ΄. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ страницы ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΈ/ΠΈΠ»ΠΈ искаТСнном Π²ΠΈΠ΄Π΅, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ сказываСтся Π½Π° SEO. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Π½Π° сторонС сСрвСра (SSR) ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ статичСских страниц.

SSR

ΠŸΡ€ΠΈ сСрвСрном Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅ содСрТимоС страницы формируСтся Π½Π° сСрвСрС, Π° Π½Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠšΠ»ΠΈΠ΅Π½Ρ‚ сразу ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ HTML-страницу, которая содСрТит всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΈ динамичСскиС элСмСнты.

ΠŸΠ»ΡŽΡΡ‹:

  • Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° загруТаСтся быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π½Π΅ ΠΆΠ΄Π΅Ρ‚ выполнСния JavaScript.
  • ΠŸΠΎΠΈΡΠΊΠΎΠ²Ρ‹Π΅ систСмы видят ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚.
  • ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для страниц с динамичСским ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ.

ГСнСрация статичСских страниц

ΠŸΡ€ΠΈ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ содСрТимоС страницы формируСтся Π½Π° этапС сборки, Π° Π·Π°Ρ‚Π΅ΠΌ сохраняСтся ΠΊΠ°ΠΊ статичСскиС HTML-Ρ„Π°ΠΉΠ»Ρ‹. Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ сайту.

ΠŸΠ»ΡŽΡΡ‹:

  • ΠžΡ‡Π΅Π½ΡŒ быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сСрвСр просто ΠΎΡ‚Π΄Π°Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ HTML-страницу.
  • Π₯ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для статичного ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π΄ΠΊΠΎ мСняСтся.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: SSR с использованиСм Next.js

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сСрвСр выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getServerSideProps, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ с API (https://api.example.com/data), добавляСт ΠΈΡ… Π² HTML, ΠΈ отправляСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΡƒΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Π½Π½ΡƒΡŽ страницу.

// pages/index.js
import React from 'react';
 
const Home = ({ data }) => (
  <div>
    <h1>{data.title}</h1>
    <p>{data.description}</p>
  </div>
);
 
export async function getServerSideProps() {
  // Fetch data at runtime
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();
 
  return { props: { data } };
}
 
export default Home;

Π’Π΅Π³ rel="canonical"

JavaScript-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСсколько вСрсий ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ страницы. Π­Ρ‚ΠΎ особСнно часто происходит Π² случаях, ΠΊΠΎΠ³Π΄Π° URL-адрСса Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΈΠ·-Π·Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² ΠΈΠ»ΠΈ состояния Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, поисковыС систСмы ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ страницы ΠΊΠ°ΠΊ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Β«Ρ€Π°Π·ΠΌΡ‹Π²Π°Π½ΠΈΡŽΒ» сигналов ранТирования (нСсколько вСрсий ΠΎΠ΄Π½ΠΎΠΉ страницы Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… поиска).

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π΅Π³ rel="canonical", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ (ΠΊΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ) Π²Π΅Ρ€ΡΠΈΡŽ страницы. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ этого Ρ‚Π΅Π³Π° позволяСт:

  • ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ всС Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ URL-адрСса Π² ΠΎΠ΄Π½Ρƒ Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΡƒΡŽ страницу.
  • Π˜Π·Π±Π΅ΠΆΠ°Ρ‚ΡŒ раздСлСния сигналов ранТирования ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ страницами.
  • Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… ссылок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π΅Ρ€ΡΡ‚ΡŒ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈΠ·-Π·Π° Π»ΠΎΠΆΠ½Ρ‹Ρ… сигналов ΠΎ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Π°Ρ….
<head>
  <link rel="canonical" href="https://www.example.com/original-page" />
</head>

ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°Ρ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с React Router, ΡƒΠ΄ΠΎΠ±Π½Π° для создания динамичСских SPA-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Однако Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ рСализация ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ с индСксациСй. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ:

  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΡŒΡ‚Π΅ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ссылки. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ элСмСнты <Link> вмСсто <a> для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ². Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ поисковым систСмам ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ страницы.
  • ΠžΠ±Π½ΠΎΠ²Π»ΡΠΉΡ‚Π΅ URL Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ всСй страницы. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ history.pushState() для измСнСния URL, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹ΠΌ, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠΏΡ‹Ρ‚ Π±Ρ‹Π» ΠΏΠ»Π°Π²Π½Ρ‹ΠΌ.
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
 
function App() {
  return (
    <Router>
      <nav>
        <Link to="/about">About Us</Link>
        <Link to="/contact">Contact</Link>
      </nav>
      <Route path="/about" component={About} />
      <Route path="/contact" component={Contact} />
    </Router>
  );
}

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ рСализация ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ (лСнивая) Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° позволяСт ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы ΠΈ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сайта: второстСпСнный ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ загруТаСтся Π½Π΅ сразу, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Однако поисковики ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, Ссли ΠΎΠ½ загруТаСтся слишком ΠΏΠΎΠ·Π΄Π½ΠΎ, Π»ΠΈΠ±ΠΎ поисковыС Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ JavaScript, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Π΅Π³ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½ΡƒΠΆΠ½ΠΎ:

  • Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ Π² ΠΏΠΎΠ»Π΅ зрСния ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ страницы (Π½Π°Π΄ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ).
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ запасныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ для элСмСнтов с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Intersection Observer API для эффСктивной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
// Lazy loading images
const images = document.querySelectorAll('img[data-src]');
 
const imgObserver = new IntersectionObserver((entries, observer) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      observer.unobserve(img);
    }
  });
});
 
images.forEach(img => {
  imgObserver.observe(img);
});

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ – эффСктивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для страниц с большим количСством JavaScript-ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ поисковиками.

Π‘ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  • ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скрыт Π·Π° слоТными JavaScript-взаимодСйствиями ΠΈΠ»ΠΈ экранами Π²Ρ…ΠΎΠ΄Π°.
  • ΠŸΠΎΠΈΡΠΊΠΎΠ²Ρ‹Π΅ Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹ ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Ρ‚Π°ΠΊΠΎΠ³ΠΎ динамичСского ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°.

РСшСниС:

БСрвисы ΠΏΡ€Π΅-Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Prerender.io ΠΈΠ»ΠΈ Rendertron) ΡΠΎΠ·Π΄Π°ΡŽΡ‚ статичСскиС HTML-вСрсии страниц ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для поисковых Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ². ΠŸΡ€ΠΈ этом:

  • ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ сайта.
  • ΠŸΠΎΠΈΡΠΊΠΎΠ²Ρ‹Π΅ Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ HTML-Π²Π΅Ρ€ΡΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
const express = require('express');
const prerender = require('prerender-node');
 
const app = express();
app.use(prerender.set('prerenderToken', 'YOUR_TOKEN_HERE'));
 
app.get('/', (req, res) => {
  res.send('Hello World!');
});
 
app.listen(3000);

ДинамичСскиС ΠΌΠ΅Ρ‚Π°-Ρ‚Π΅Π³ΠΈ

ΠœΠ΅Ρ‚Π°-Ρ‚Π΅Π³ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ поисковым систСмам ΠΏΠΎΠ½ΡΡ‚ΡŒ содСрТаниС страницы ΠΈ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° коэффициСнт ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (CTR), ΠΊΠΎΠ³Π΄Π° страница отобраТаСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… поиска. Для сайтов Π½Π° JavaScript эти Ρ‚Π΅Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ динамичСски, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ содСрТаниС страницы. Π­Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ИИ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π»ΠΈΠ΄ΠΎΠ² ΠΈΠ»ΠΈ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов. ДинамичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°-Ρ‚Π΅Π³ΠΈ Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнтов Ρ‚ΠΈΠΏΠ° react-helmet: ΠΎΠ½ обСспСчиваСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ видят поисковыС систСмы ΠΈ соцсСти. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π½ΠΆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² поискС ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ страниц ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² соцсСтях:

import { Helmet } from 'react-helmet';
 
function BlogPost({ title, description }) {
  return (
    <div>
      <Helmet>
        <title>{title}</title>
        <meta name="description" content={description} />
      </Helmet>
      <h1>{title}</h1>
      <p>{description}</p>
    </div>
  );
}

Настройки robots.txt

Π’Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» robots.txt: ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ областям сайта, сохраняя ΠΏΡ€ΠΈ этом доступ ΠΊ Π²Π°ΠΆΠ½Ρ‹ΠΌ рСсурсам, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ для индСксирования. Allow: /js/ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ доступ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ с JavaScript-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ поисковыС систСмы ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ страницы:

User-agent: *
Disallow: /private/
Allow: /js/

Навигационная Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° с JSON-LD

Β«Π₯Π»Π΅Π±Π½Ρ‹Π΅ ΠΊΡ€ΠΎΡˆΠΊΠΈΒ» ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΊ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΈ для поисковых систСм: Google ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΡ… Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… поиска, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ структуру сайта ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (CTR). ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ структурированиС Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JSON-LD, позволяСт поисковым систСмам ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Π»Π΅Π±Π½Ρ‹Π΅ ΠΊΡ€ΠΎΡˆΠΊΠΈ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΈΡ… Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² поисковых систСмах:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://www.example.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Blog",
      "item": "https://www.example.com/blog"
    }
  ]
}
</script>

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ сканирования

Π‘ΡŽΠ΄ΠΆΠ΅Ρ‚ сканирования – это количСство страниц, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поисковая систСма ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° сайтС Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя. Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ JavaScript-скрипты ΠΈ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ API ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·Ρ€Π°ΡΡ…ΠΎΠ΄ΠΎΠ²Π°Ρ‚ΡŒ этот Π±ΡŽΠ΄ΠΆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС страницы Π±ΡƒΠ΄ΡƒΡ‚ просканированы ΠΈ проиндСксированы. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ сканирования, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

  • ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ JavaScript-ΠΊΠΎΠ΄Π°.
  • Π˜Π·Π±Π΅Π³Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² API Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страниц.
  • Π‘ΠΎΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ вСс JavaScript-Π±Π°Π½Π΄Π»ΠΎΠ² для ускорСния Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страниц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ поисковыС систСмы ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ большС ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ API ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ с использованиСм sessionStorage, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°ΠΌΠΈ страницы:

function loadData() {
  if (!sessionStorage.getItem('dataLoaded')) {
	fetch('https://api.example.com/data')
  	.then(response => response.json())
  	.then(data => {
    	// Process data
    	console.log(data);
    	sessionStorage.setItem('dataLoaded', true);
  	})
  	.catch(error => console.error('Error fetching data:', error));
  }
}
 
document.addEventListener('DOMContentLoaded', loadData);

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ чистоты URL

ΠžΠ΄Π½ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ SPA-прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ URL с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ запросов ΠΈΠ»ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ #, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ портят ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ SEO. ΠœΠ΅Ρ‚ΠΎΠ΄ window.history.replaceState() обновляСт URL Π² адрСсной строкС Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ соотвСтствиС URL ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ:

// Clean up URL after loading dynamic content
window.history.replaceState(null, 'New Page Title', '/new-url-path');

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

JavaScript Π΄Π΅Π»Π°Π΅Ρ‚ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, Π½ΠΎ Π΅Π³ΠΎ использованиС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния SEO. БлСдуя этим рСкомСндациям, Π²Ρ‹ смоТСтС ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ сайта Π² поисковых систСмах Π±Π΅Π· ΡƒΡ‰Π΅Ρ€Π±Π° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΏΡ‹Ρ‚Π°.

***

Π₯ΠΎΡ‡Π΅ΡˆΡŒ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Frontend с нуля? Π’ Proglib Academy запускаСтся двухмСсячный курс Frontend Basic ΠΎΡ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ² ΠΈΠ· Ρ‚ΠΎΠΏΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ: ΠΎΡ‚ основ HTML Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Ρ… React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, с ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈ ΠΏΠΎΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ доступом ΠΊ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•