вход на сайт

Имя пользователя :
Пароль :

Восстановление пароля Регистрация

SEO Friendly SPA - ITNEXT

  1. Одностраничные приложения и SEO
  2. Красивые URL
  3. Sitemaps
  4. Кэширование
  5. Предварительная визуализация
  6. Рендеринг на стороне сервера
SEO имеет важное значение для привлечения органического трафика на ваш сайт.

Усовершенствования поисковой оптимизации могут быть очень полезны для привлечения большего трафика на маркетинговые сайты, блоги и другие приложения. Но все больше и больше таких сайтов / приложений создаются с использованием одностраничных приложений (SPA) или сайтов, которые полностью отображаются в браузере клиента.

Поисковая оптимизация (SEO) - это дисциплина, направленная на то, чтобы веб-сайты выглядели выше в обычных (неоплачиваемых) результатах поиска в поисковых системах, таких как Google, Bing и Yahoo. Он также вырос в социальных сетях, таких как Twitter, Facebook и Instagram. Тем не менее, SEO включает в себя больше, чем просто создание удобных для поиска URL-адресов и ключевых слов и добавление их на эти платформы. Он включает в себя все, от того, как вы ссылаетесь на свой сайт, до слов на самих страницах и метатегов, которые вы включаете в заголовок. Фактически, целые книги были написаны на эту тему, и компании существуют исключительно для того, чтобы помочь вам с вашим SEO. Имея это в виду, большинство специфических для SEO тем не будут освещены здесь. Вместо этого я сосредоточусь в первую очередь на том, что вы можете делать в SPA, используя JavaScript, чтобы сделать ваш сайт более дружественным к SEO. Рекомендации Google & Bing для веб-мастеров содержат несколько простых советов по SEO. Так что взгляните на эти ресурсы, прежде чем продолжить.

Рекомендации Google для веб-мастеров:

com/webmasters/answer/35769?hl=en> https://support.google.com/webmasters/answer/35769?hl=en

Рекомендации Bing для веб-мастеров:

https://www.bing.com/webmaster/help/webmaster-guidelines-30fba23a

Одностраничные приложения и SEO

СПА отличаются от традиционных сайтов. В первые дни Интернета веб-сайт представлял собой просто файл HTML, который подавался с компьютера в колледже, правительственном учреждении или на предприятии. Их было легко искать, потому что весь контент был непосредственно встроен в этот файл, очень похоже на чтение документа в текстовом редакторе. У него была четкая иерархия, очень похожая на документ. Объектная модель документа (DOM), которую использует веб-сайт, даже отражает это. Например, теги с <h1> по <h6> являются заголовками, используемыми для запуска частей документа. Тег <p> является абзацем, и в <section> обычно есть несколько абзацев, содержащих контент. И <таблица> используется для табличных данных. Если вам нужна дополнительная информация о самом HTML, прочитайте MDN Введение в HTML , Подробнее о DOM, как взаимодействовать с ним с помощью JavaScript, читайте в MDN. Введение в DOM ,

Рендеринг на стороне сервера был добавлен позже как способ загрузки содержимого на страницу перед передачей клиенту. Это позволило людям писать блоги и новостные сайты и в конечном итоге начать создавать приложения для удовлетворения различных потребностей бизнеса. По мере усложнения приложений людям приходилось использовать HTML для выражения вещей, которые не очень похожи на документы. Это создало потребность в SEO, чтобы позволить поисковым системам находить контент на этих сайтах и ​​в приложениях.

Однако по мере того, как платформы JavaScript стали более распространенными, веб-сайты изменились еще более радикально. Такие функции, как бесконечная прокрутка, асинхронная загрузка данных после загрузки HTML через Ajax и другие библиотеки XHR и рендеринг DOM-элементов на стороне клиента, затрудняют поисковым системам сканирование страниц. SPA могут даже обновлять целые страницы, даже не обращаясь к серверу и не меняя URL.

Сейчас SPA являются обычным явлением, и поисковые системы знают, как их потреблять. Google создал и Microsoft принял Angular.js, Facebook сделал то же самое с React.js. Они также переработали свои функции поиска, чтобы иметь возможность полностью загружать и сканировать SPA. Но это не значит, что вы можете просто создать его и просто показать в поисковых системах. Не вдаваясь в основы того, как работает SEO, вот несколько вещей, которые вы можете сделать, чтобы ваш SPA работал с поисковыми системами.

Красивые URL

Многие клиентские платформы используют хэши (URL-адреса, содержащие #, такие как http (s): //www.example.com/#about) и hashbangs (http (s): //www.example.com/#! Key = value Обработка их маршрутизации. Функционально SPA ведет себя так же, как обычный веб-сайт. URL-адрес изменяется, и содержимое обновляется с использованием маршрутизатора JavaScript или других средств. И хотя вы можете подумать, что роботам, сканирующим ваш сайт, может быть наплевать, если вы используете хэш, пользователи, использующие ваш сайт, увидят более чистый, более удобный для пользователя URL без них.

Кроме того, некоторые сканеры, такие как Google, интерпретируют URL с помощью hashbangs #! в качестве индикатора того, что существует альтернативный обычный URL-адрес, обеспечивающий такое же состояние страницы во время загрузки. По этой причине рекомендуется использовать только хэши http (s): //www.example.com/#/pagename или маршруты без хеша в стиле HTML5, такие как http (s): //www.example.com/pagename, используя такие технологии, как PushState. PushState - это способ изменить URL, отображаемый в браузере через JavaScript, без перезагрузки страницы. Он изменяет объект истории следующим образом: window.history.pushState (data, "Page Title", "/ new-url"). Вы получите красивый URL.

Другой часто используемый трюк с URL - это строка запроса. Использование строки запроса для таких вещей, как категории, условия поиска и другие параметры вполне допустимо. Он может использоваться в сочетании с любым из вышеупомянутых методов манипулирования URL. Поисковые системы могут отличать http (s): //www.example.com/? Category = people от http (s): //www.example.com/? Category = cars, особенно если каждый URL определен и рекомендуется быть проиндексированы в вашей карте сайта.

Sitemaps

Файлы Sitemap используются поисковыми системами для лучшего понимания содержания вашего сайта. Возможно, вам не всегда это нужно. Например, ваш сайт очень маленький и хорошо связан. Однако, если ваш сайт действительно большой или имеет плохую ссылку, более вероятно, что сканеры веб-сайтов могут пропустить новые или недавно обновленные страницы.

Но если на вашем сайте имеется большой архив содержательных страниц, которые изолированы или плохо связаны друг с другом, карта сайта может быть хорошей стратегией. Например, если страницы вашего сайта не ссылаются друг на друга через ссылки, вы можете перечислить их в карте сайта, чтобы сканеры не пропустили эти страницы. Кроме того, если ваш сайт новый и на него мало внешних ссылок, сканеры могут его не найти. Или если вы используете метаданные, такие как видео или изображения. Сканеры обычно переходят с одной страницы на другую и могут не обнаружить ваши страницы или контент, если на них не ссылаются другие сайты. В этом случае карта сайта выгодна.

Чтобы бот использовал вашу карту сайта, вы должны создать и разместить файл с именем sitemap.xml. Содержание и структура вашего sitemap.xml здесь не рассматриваются. Узнайте больше на Узнайте о файлах сайта - Справка консоли поиска ,

Если ваш сайт размещен статически, вы можете просто разместить свой sitemap.xml на корневом уровне. Если вы используете серверную среду, такую ​​как Express, вы можете разместить файл следующим образом:

app.get ('/ sitemap.xml', (req, res, next) => {
res.sendFile ( 'общественный / sitemap.xml')
})

Существуют и другие способы размещения файла в зависимости от вашей среды. Например, используя Express, вы можете обслуживать все в общей папке, используя express.static. Увидеть Обслуживание статических файлов в Express для дополнительной информации.

app.use (express.static (__dirname + '/ public'))

Чтобы сообщить ботам о вашем файле карты сайта, вам нужно сослаться на него в файле с именем robots.txt:

// robots.txt
Карта сайта: /sitemap.xml

Убедитесь, что вы также обслуживаете этот файл в корне или в среде, такой как Express:

app.get ('/ robots.txt, (req, res, next) => {
res.sendFile ( 'общественный / robots.txt')
})

Или, если вы используете express.static, просто поместите его в папку / public. Есть много способов сделать это, и это зависит от сервера (Apache, Nginx, Express и т. Д.).

Боты всегда будут искать корневой URL для этого файла. Убедитесь, что он обслуживается по адресу http (s): //www.example.com/robots.txt.

Кроме того, есть инструменты, доступные для динамического отображения ваших карт сайта. Популярным выбором для Node является пакет NPM Карта сайта ,

Кэширование

Еще один простой способ повысить эффективность SEO - это ускорить загрузку страниц. Современные веб-сканеры заботятся о времени загрузки и отдают приоритет более быстрым страницам с аналогичным содержанием, а не медленным. Поскольку фреймворки JavaScript отображаются после загрузки страницы и всех ресурсов (иногда даже ожидающих завершения вызовов Ajax / XHR), они, как правило, работают медленнее, чем предварительно обработанные страницы на стороне сервера. Я рекомендую использовать Google PageSpeed ​​Insights проверить ваши страницы.

Одним из способов ускорить загрузку страниц является кэширование вашего контента, особенно если это не тот контент, который часто меняется. Это может быть легко обработано в Express.

Если вы размещаете свои файлы в статической папке, вы можете просто использовать Express.static:

const cacheTime = 86400000 * 10 // 10 дней app.use (express.static (__dirname + '/ public', {maxAge: cacheTime}))

В качестве альтернативы, если вы используете sendFile, вы можете установить кеш там:

app.get ('/ robots.txt, {maxAge: cacheTime}, (req, res) => {
res.sendFile ( 'общественный / robots.txt')
})

Если вы размещаете свои файлы в CDN, вам вместо этого необходимо настроить там правила кэширования. Это рекомендуется для чисто статических страниц, и вы можете попробовать Amazon CloudFront, CloudFlare или другие CDN. Но если вы работаете с Node, это может быть очень простым и масштабируемым решением. Я рекомендую больше смотреть в правилах на Express 4.x - Справочник по API ,

И, наконец, использование gzip или deflate для сжатия вашего контента может значительно ускорить процесс. В экспрессе это легко достигается с помощью сжатия.

$ npm установить сжатие const сжатие = требуется ('сжатие')
const express = require ('express') const app = express () // сжимать все ответы
app.use (сжатие ()) // добавить все маршруты

Увидеть документация для конфигурации.

Предварительная визуализация

Есть несколько инструментов для предварительного рендеринга вашей страницы перед ее отправкой клиенту. Это также ускоряет время загрузки, что увеличивает ваш SEO и общий пользовательский опыт. При таком подходе вы запускаете свое приложение перед его развертыванием, захватываете выходные данные страницы и заменяете ваши HTML-файлы этим захваченным выходным сигналом. Обычно это достигается с помощью безголового браузера (веб-браузера без графического интерфейса пользователя), такого как PhantomJS.

Предварительный рендеринг является хорошим выбором, поскольку нет дополнительной нагрузки на сервер, и поэтому он быстрее и дешевле, чем рендеринг на стороне сервера. Это также более простая производственная установка, позволяющая писать более простой код приложения (нет необходимости в изоморфном коде). Поэтому он менее подвержен ошибкам и может быть легче кэшироваться дольше. Кроме того, он не требует производственного сервера Node.js.

Предварительный рендеринг не всегда хороший выбор. Например, он не очень хорошо работает для страниц, которые отображают постоянно изменяющиеся данные, которые должны загружаться динамически во время загрузки, или для страниц, имеющих пользовательское содержимое. Обычно страницы, которые соответствуют этим требованиям, менее критичны для предварительного рендеринга. Только часто используемые страницы, которые вы хотите быстро обслуживать, должны быть предварительно обработаны. В противном случае серверный рендеринг (SSR) может быть лучшим вариантом. (См. Следующий раздел для получения дополнительной информации о SSR.)

Вот пример того, как предварительно отрендерить приложение, используя prerender-spa-plugin для Webpack. Обычно используемый JS-упаковщик, который имеет множество других возможностей с использованием плагинов. Вы можете найти множество других инструментов, совместимых с другими языками, пакетами или платформами, в зависимости от ваших потребностей.

$ npm install --save-dev prerender-spa-plugin

Плагин предварительной визуализации создает экземпляр PhantomJS и запускает приложение. Затем он делает снимок DOM и выводит снимок в файл HTML в папке сборки Webpack. Он повторяет этот процесс для каждого маршрута, поэтому создание приложения может занять много времени, если у вас много страниц.

Вот простой пример простой конфигурации Webpack с использованием плагина предварительной визуализации.

// webpack.conf.js
const path = require ('path')
const PrerenderSpaPlugin = require ('prerender-spa-plugin')
module.exports = {
// ...
плагины: [
новый PrerenderSpaPlugin (
// Абсолютный путь к скомпилированному SPA
path.join (__dirname, './public'),
// Список маршрутов для подачи
['/', '/ about', '/ contact']
)
]
}

В этом примере создается новый экземпляр подключаемого модуля предварительной визуализации, и вы сообщаете ему, в какую папку выводить данные, и список маршрутов, которые вы хотите посетить браузеру PhantomJS при создании файлов HTML. Это только два обязательных параметра при настройке плагина. Вы также можете при желании передать более продвинутую конфигурацию плагину.

// webpack.conf.js
const path = require ('path')
const PrerenderSpaPlugin = require ('prerender-spa-plugin')
module.exports = {
// ...
плагины: [
новый PrerenderSpaPlugin (
// Абсолютный путь к скомпилированному SPA
path.join (__dirname, './public'),
// Список маршрутов для подачи
['/', '/ about', '/ contact'],
// (НЕОБЯЗАТЕЛЬНЫЙ)
{
// варианты идут сюда
}
)
]
}

Если вы не полагаетесь на контент, отображаемый асинхронно, например, после запроса Ajax / XHR, ни один из этих параметров не требуется. Все синхронные сценарии уже выполняются перед захватом содержимого страницы. Каждый из следующих параметров является частью объекта необязательных параметров.

Если вы хотите подождать, пока на странице не сработает определенное событие JavaScript:

captureAfterDocumentEvent: 'custom-post-render-event'

Затем в вашем файле JavaScript отправьте событие:

document.dispatchEvent (new Event ('custom-post-render-event'))

Вместо этого вы можете подождать, пока определенный элемент HTML не будет обнаружен с помощью document.querySelector.

captureAfterElementExists: '#content'

Или, опционально, вы можете подождать, пока пройдет несколько миллисекунд после выполнения сценариев. Важно отметить, что это может привести к ненадежным результатам, если вы полагаетесь на сетевую связь или другие операции с очень изменчивой синхронизацией.

язык: javascript
captureAfterTime: 5000

Вы можете даже комбинировать стратегии, если хотите. Например, если вы только иногда хотите дождаться, пока событие не сработает, вы можете создать тайм-аут, комбинируя captureAfterTime с captureAfterDocumentEvent. При объединении стратегий контент страницы будет захвачен после первой сработавшей стратегии.

Вместо громкого сбоя ошибок JavaScript (по умолчанию) вы можете просто игнорировать их.

язык: javascript
ignoreJSErrors: true

Чтобы изменить путь к файлу индекса, вместо стандартного index.html в статическом корне:

язык: javascript
indexPath: path.resolve ('/ public / path / to / index.html')

Поскольку PhantomJS иногда сталкивается с периодическими проблемами, плагин автоматически повторяет захват страницы до 10 раз по умолчанию. Вы можете повысить или понизить этот лимит, если хотите.

язык: javascript
maxAttempts: 10

Теперь вы должны запретить PhantomJS переходить от URL-адреса, переданного ему, и предотвратить загрузку встроенных фреймов (например, встраивания Disqus и Soundcloud), которые не идеальны для SEO и могут привести к ошибкам JavaScript.

язык: javascript
навигация заблокирована: правда

Приведенные ниже параметры предоставляют параметры конфигурации для PhantomJS, в тех редких случаях, когда вам нужны специальные настройки для конкретных систем или приложений.

язык: javascript
// http://phantomjs.org/api/command-line.html#command-line-options
phantomOptions: '--disk-cache = true', // http://phantomjs.org/api/webpage/property/settings.html
phantomPageSettings: {
loadImages: true
}, // http://phantomjs.org/api/webpage/property/viewport-size.html
phantomPageViewportSize: {
ширина: 1280,
высота: 800
}

Теперь вы можете вручную преобразовать HTML для каждой страницы после предварительного рендеринга, например, чтобы задать заголовок страницы и метаданные в крайних случаях, когда вы не можете справиться с этим с помощью своего решения для маршрутизации.

Аргумент контекста функции содержит два свойства:

  • html - результирующий HTML после предварительного рендеринга
  • route - маршрут, который обрабатывается в данный момент (например, "/", "/ about" или "/ contact")

Все, что возвращается, будет напечатано в предварительно обработанный файл.

язык: javascript
postProcessHtml: context => {
const title = {
'/': 'Главная',
«/ о»: «Наша история»,
'/ contact': 'Свяжитесь с нами'
}
вернуть context.html.replace (
/ <Название> [^ <] * <\ / название> / я,
'<title>' + title [context.route] + '</ title>'
)
}

Использование этого плагина позволит вам создавать простые HTML-страницы, используя любую библиотеку JS, которую вы используете. Например, React, Vue, Angular, Riot или любой другой, который можно разместить в каталоге на вашем сервере, используя Express или любой другой сервер, который вы предпочитаете.

Обратите внимание, что плагин предварительного рендеринга работает только со стратегиями маршрутизации, использующими API истории HTML5 (PushState). Никакие хеш-ссылки не будут работать с помощью этого метода. Поэтому убедитесь, что вы настроили свой JS-маршрутизатор для использования URL-адресов, таких как http (s): //www.example.com/contact. Кроме того, вы всегда должны загружать SPA, когда DOM готов, поместив свой тег в событие DOM DOMContentLoaded.

Но помните, что это не очень хороший вариант, если вы планируете запускать динамически изменяющиеся страницы, которые сильно загружают данные и постоянно меняются в зависимости от данных. Например, если вы хотите динамически генерируемые данные, основанные на пользовательской информации. Вместо этого, рендеринг на стороне сервера был бы более жизнеспособным вариантом для такого сайта.

Рендеринг на стороне сервера

Описанные выше методы лучше всего использовать с приложениями, которые должны отображаться один раз, а не динамически. Например, веб-сайты маркетинга, домашняя страница для продукта или приложение для продажи.

Для получения дополнительной информации о рендеринге на стороне сервера с JavaScript-фреймворками, посмотрите ReactDomServer а также Vue рендеринг на стороне сервера , Кроме того, большинство других JS-фреймворков имеют решения SSR. Например, две из моих любимых платформ SSR NextJS а также GatsbyJS , Кроме того, используя SSR шаблонизатор для экспресса всегда будет работать, и это на самом деле то, что мы делаем для наших Аврелий домашняя страница. В настоящее время мы используем MarkoJS для Экспресс который прост в использовании и очень быстрый.

Пожалуйста, не стесняйтесь комментировать и дайте мне знать, что вы думаете об этом руководстве по SEO для SPA. Если есть что-то, что вы хотели бы видеть добавленным или вопросы, которые вы только что сообщили мне, и я могу попытаться помочь. Если я получу достаточную обратную связь, я могу специально провести дальнейшие действия в отношении БСО.

Com/webmasters/answer/35769?
Com/?
Com/?
Поиск по сайту
Меню
Реклама на сайте
Архив новостей
Реклама на сайте

Реклама на сайте







Архив сайта
Информация
www.home-4-homo.ru © 2016 Copyright. Все права защищены.

Копирование материалов допускается только с указанием ссылки на сайт.