Генерация карты сайта: Sitemap . XML Sitemaps

Содержание

Генерация карты сайта

Ежемесячная рассылка CSSSR

Новости, свежие статьи и многое другое

e-mail

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


Приём-приём! На связи Игорь — JS-разработчик команды «Восток». Представляю вам рассказ о том, как я, работая над задачей по нашему сайту, вынес решение в публичный NPM пакет.

Проблема

Пару месяцев назад мы переписали фронтенд нашего сайта на React. Все страницы также рендерятся на сервере для индексации поисковиками. Для улучшения этого процесса роботам нужно давать подсказки. Одной из таких подсказок является карта сайта — sitemap.xml. Так как у нас периодически добавляются новые страницы, то встал вопрос — можно ли автоматизировать обновление карты сайта при деплое новой версии сайта? И я начал поиски.

Поиски решений

Первым результатом поисков было issue в репозитории react-router, где обсуждали эту же задачу. Но там дали только направление и код, который возвращает список путей из конфигурации React Router. Это позволило понять, что автоматизировать нашу задачу можно!

Самое интересное, что пользователь, который подсказал это решение, создал у себя репозиторий react-router-sitemap, но кроме файла лицензии и Readme там ничего не было. Видимо руки не дошли. 🙂

Далее необходимо было найти решение, которое трансформировало бы пути в XML формат карты сайта. Ну тут долго искать не пришлось, а вот выбирать предстояло. Решений очень много.

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

Решение для трансформирования путей в XML формат карты сайта выбрано, одной проблемой меньше. Осталось написать парсер конфигурации React Router. Поехали!

Реализация своего решения

У React Router в API есть функция, которая нам поможет — createRoutes. На вход подается конфигурация маршрутов, а на выходе получается массив объектов, которые описывают все возможные пути в вашем приложении. Пути находятся в ключах path.

В итоге, я написал модуль, который рекурсивно обходит массив объектов и сохраняет пути в одноуровневый массив. Ниже представлен код этого модуля:

sitemap/react-router-parser.js

// Формирует строку с путём, включая родительский путь, если он есть.
const generatePath = (base, path = '') => {
  base = base.length && base[base.length - 1] !== '/' ? base + '/' : base
  return base + path
}
// Парсит отдельный объект массива. Записывает путь в результирующий массив,
// если у этого пути есть вложенные пути, то для них вызывается функция parseRoutes.
// И так рекурсивно в глубину.
const processRoute = (store = [], baseRoute = '', route) => { const path = generatePath(baseRoute, route.path) const childRoutes = route.childRoutes if (childRoutes && childRoutes.length) { parseRoutes(store, path, childRoutes) } store.push(path) } // Обходит массивы с объектами и возвращает массив с путями. const parseRoutes = (store = [], baseRoute = '', routes) => { const isArray = Array.isArray(routes) if (!isArray) { store.push(generatePath(baseRoute, routes.path)) } else { routes.forEach(processRoute.bind(null, store, baseRoute)) } return store } export default parseRoutes

Результат, который возвращает этот модуль, можно подавать в Webpack плагин, но есть несколько нюансов.

Во-первых, не все пути должны попадать в карту сайта. Во-вторых, у нас в проекте есть динамические маршруты, следовательно, в результирующем массиве будут примерно такие пути — /project/:projectName

.

Это никуда не годится. \/offert/] const result = filterPaths(paths, config) // [‘/’]

С заменой параметров только один вопрос — как получить параметры для динамических путей? Так как сайт статичный и данные для таких путей у нас хранятся в JSON файлах, то проблем с этим не возникло. Была написана такая функция:

sitemap/replace-params.js

const replaceParams = (paths, rules) => {
  const regexRules = Object.keys(rules).map((key) => {
    return new RegExp(':' + rules[key].param)
  })
  return paths.reduce((result, path, index) => {
    let current = [path]
    if (index === 1) {
      result = [result]
    }
    regexRules.forEach((regex) => {
      if (!regex.test(path)) {
        return
      }
      const { values } = rules[path]
      current = values.map((value) => {
        return path.replace(regex, value)
      })
    })
    return result.concat(current)
  })
}

На вход она принимает массив путей и конфигурацию такого вида:

{
  '/project/:projectName': { // путь, в котором нужно заменить параметры
    param: 'projectName', // имя параметра, которое нужно заменить на значение
    values: ['foo', 'bar'], // значения, которые нужно подставить на место параметра
  },
}

Пример работы этой функции:

const paths = ['projects/:projectName']
const config = {
  'projects/:projectName': {
    param: 'projectName',
    values: ['foo', 'bar'],
  },
}
const result = replaceParams(paths, config) // [’projects/foo’, ’projects/bar’]

Нужные функции написаны, осталось объединить их в один модуль и внедрить в сборку. \/jobs\/.+\/.+/] const paramsConfig = { ‘/jobs/:jobName’: { param: ‘jobName’, values: vacancies, }, } const rawRoutes = createRoutes(routes) const paths = parser([], », rawRoutes) const filteredPaths = filterPaths(paths, filterConfig) const result = replaceParams(filteredPaths, paramsConfig) export default result

Так как мы используем ES2015 синтаксис, то пришлось обернуть этот модуль ещё в один скрипт, чтобы траспайлить его:

sitemap/index.js

// Из-за того, что у нас проекте используются cssModules, при импорте routes,
// по цепочке, начинают импортироваться стили, и node.js кидает ошибки.
// Было решено просто игнорировать эти импорты.
require.extensions['.css'] = function () {
  return null
}
// Включаем транспайлинг и полифил для использования новых методов,
// которых нет в ES5.
require('babel-register')
require('babel-polyfill')
// Экспортируем результат выполнения нашего модуля.
module.exports = require('.
/paths-builder').default

Приступаем к внедрению в сборку. Ниже представлена часть Webpack конфига, которая отвечает за создание карты сайта:

webpack.config.js

import paths from './sitemap';
import SitemapPlugin from 'sitemap-webpack-plugin';
const sitemapDist =  '../../static/sitemap.xml';
const hostname = process.env.BASE_URL;
const config = {
  ...,
  plugins: [
    ...,
    new SitemapPlugin(hostname, paths, sitemapDist),
    ...,
  ]
  ...,
};

Проверив локально работу данного плагина и убедившись, что все работает корректно, я отправил Pull Request.

Первый (и последний) фэйл

После проверки работы модуля в тестовом окружении обнаружилась критичная бага. По непонятным причинам Webpack плагин отказывался создавать файл по указанному ему пути. Ошибка возникала при попытке сохранить файл в директорию, отличную от нахождения Webpack конфига. С правами на запись было всё в порядке.

Разобраться, почему так происходит, у нас не вышло, и я отказался от Webpack плагина в пользу NPM скрипта.

Для генерации карты сайта был выбран самый популярный NPM пакет. Для его использования пришлось немного дополнить наш модуль, примерно так:

sitemap/index.js

require.extensions['.css'] = function () {
  return null
}
require('babel-register')
require('babel-polyfill')
const fs = require('fs')
const sm = require('sitemap')
const paths = require('./paths-builder').default
const sitemap = sm.createSitemap({
  hostname: process.env.BASE_URL,
  urls: paths.map((_path) => ({ url: _path })),
})
fs.writeFileSync('./static/sitemap.xml', sitemap.toString())

Для запуска модуля был объявлен скрипт в package.json

:

{
  ...,
  "sitemap": "node ./sitemap",
  ...,
}

После проверки в тестовом окружении ошибок и проблем не возникло, и модуль был включен в ближайший деплой.

А может поделиться?

Модуль написан, внедрён и прекрасно работает. Казалось бы всё, можно отдыхать. Но я не остановился и решил, что надо его оформить в публичный NPM пакет. Всё-таки при поиске был вопрос ещё у одного пользователя по схожей задаче, а решения публичного нет. Заодно код причешу и попрактикуюсь в разработке open source решений (до этого я ничего сам не выпускал).

За пару недель работы по вечерам я справился с поставленной задачей и опубликовал NPM пакет react-router-sitemap.

Итог

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

Призываю не бояться, делиться своими внутренними разработками (если они не засекречены, конечно) и выпускать их в качестве NPM пакетов или просто в публичных репозиториях. Если будет интерес, то я расскажу подробнее о своём пути публикации NPM пакета и вообще про разработку open source библиотеки.

Если есть вопросы, пишите их в комментариях в блоге или твиттере. Готов на всё ответить.

Всем спасибо за внимание и до связи!

Ежемесячная рассылка CSSSR

Новости, свежие статьи и многое другое

e-mail

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

Поделиться

Читайте также

  • Итоги 2021 от CSSSR. Год длиной в железнодорожный состав

    Максим Вислогуров

  • 10 подсказок начинающим QA инженерам

    Айжана Нургалиева

Комментарии

Сотбит: SEO умного фильтра: мета-теги, заголовки, карта сайта — Администрирование

Генерация карты сайта

Карта сайта (sitemap) представляет собой XML-файл, содержащий в себе информацию для поисковых систем о страницах сайта, которые подлежат индексации. Карта сайта помогает роботам поисковых систем определить местоположение страниц сайта, время их последнего обновления, частоту обновления и приоритет относительно других страниц сайта. Модуль SEO умного фильтра генерирует карту сайта на основе настроенных в нем условий и включает её в состав основной карты сайта, сгенерированной системой Битрикс.

Генерировать карту сайта SEO умного фильтра надо только после того, как сгенерирована основная карта сайта.

Чтобы перейти к генерации карты сайта требуется:

  1. Перейти в раздел Администрирование.

  2. Перейти в раздел Сотбит.


  3. Выбрать SEO умного фильтра.

  4. Выбрать Генерация карты сайта.


Для добавления новой карты сайта требуется нажать Добавить.

В появившемся выпадающем меню требуется выбрать сайт для которого создается карта.

Заполнение информации

  • Название – Название генерации.
  • Адрес основной карты сайта – из выпадающих меню требуется выбрать составляющие адреса.
  • Тип фильтра – в данном поле требуется выбрать действующий для условий тип фильтра.
    • Bitrix фильтр с ЧПУ.
    • Bitrix фильтр без ЧПУ.
    • MissShop фильтр с ЧПУ.
    • Kombox фильтр с ЧПУ.
  • Выводить в карту сайта только настроенные ЧПУ – при включенной опции в карту сайта включаются только страницы из условий в которых сгенерированы и активированы ЧПУ.

После заполнения всех требуемых полей нажмите Сохранить и запустить.

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

Время генерации карты напрямую зависит от количества чпу ссылок модуля. Настоятельно рекомендуется дождаться окончания генерации и не закрывать (обновлять) страницу. В противном случае генерация завершится некорректно. После окончания генерации карты сайта требуется проверить ее корректность.

Для того, чтобы посмотреть сгенерированную карту сайта требуется перейти по пути: Рабочий стол > Контент > Структура сайта > Файлы и папки.

Требуемый файл имеет имя sitemap_seometa_{ID генерации карты}_{номер части}.xml

Для облегчения поиска файлов воспользуйтесь фильтром. В поле Имя требуется ввести sitemap.

 

Описание курса

назад Автогенерация условий Список ЧПУ вперед

Нужна помощь в настройке решения

Оставьте заявку и мы свяжемся с вами!

Companion Sitemap Generator — HTML и XML — Плагин WordPress

  • Детали
  • отзывов
  • Монтаж
  • Поддерживать
  • Развитие
Что такое карта сайта?

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

Возможности плагина

Легко создавайте карту сайта, которая затем обновляется каждый час или может быть обновлена ​​вручную в любое время через панель управления WordPress. Вы можете выбрать отдельные страницы/сообщения или целые типы сообщений, которые вы хотите исключить из карты сайта. Он сгенерирует как XML-карту сайта, так и HTML-карту сайта, которую вы можете отобразить на своем сайте с помощью шорткода или блока Гутенберга.

Мы будем держать поисковые системы в актуальном состоянии для вас

Если в вашу карту сайта будут внесены изменения, мы сообщим об этом поисковым системам. Вам больше не нужно отправлять им руководство.

Что мы добавляем в карту сайта?

В карту сайта добавляются следующие URL-адреса (конечно, с возможностью их скрытия):

  • Страницы
  • сообщения
  • Опубликовать изображения
  • Категории постов
  • Почтовые теги
  • Пользовательские типы записей
  • Пользовательские таксономии
  • Дополнительные страницы: добавьте URL самостоятельно
Редактор роботов

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

Многоязычный

Companion Sitemap Generator также поддерживает многоязычные карты сайта. На данный момент это поддерживается только при использовании плагина Polylang, но дополнительные плагины будут добавлены по запросу.

Мультисайт

Этот плагин поддерживает мультисайт. Каждый сайт получит свою карту сайта.

  • Панель инструментов Sitemap
  • Исключить записи из карты сайта
  • Быстрое обновление через панель управления
  • Редактировать файл robots
  • HTML Карта сайта

Этот плагин предоставляет 1 блок.

  • Генератор сопутствующих карт сайта — HTML и XML
Ручная установка
  1. Загрузить Companion Sitemap Generator.
  2. Загрузите каталог «Сопутствующий генератор карты сайта» в каталог «/wp-content/plugins/».
  3. Активируйте Companion Sitemap Generator со страницы плагинов.
Через WordPress
  1. Найдите «Генератор сопутствующих карт сайта».
  2. Нажмите «Установить».
  3. Активировать.
Настройки
  1. Настройте этот плагин через Инструменты > Карта сайта.

будучи импульсивным блоггером-новичком, я целыми днями боролся за то, чтобы правильно настроить карты сайта и текст робота, но тщетно. Увы! этот плагин решил все мои проблемы в мгновение ока. Слава разработчикам.

Многофункциональная функция. Карта сайта или карта сайта не соответствуют public.html. Муито бом.

5 ⭐ плагин

Я использовал другой плагин карты сайта, и они прекратили его поддержку. Я искал 8 других плагинов, а затем нашел этот. Большое спасибо! Я жертвую деньги прямо сейчас!!

Протестировано несколько генераторов карт сайта, и ему больше всего понравился Companion Sitemap Generator благодаря его простому и понятному пользовательскому интерфейсу!

Перепробовав все другие генераторы карт сайта и почти отказавшись наконец от простого создания вручную статического файла sitemap.xml, я нашел этот! И он прост в использовании и работает безупречно. Большое спасибо создателям Companion Sitemap Generator!

Прочитать все 47 отзывов

«Сопутствующий генератор карт сайта — HTML и XML» — это программное обеспечение с открытым исходным кодом. Следующие люди внесли свой вклад в этот плагин.

Авторы

  • Папен Шиппер
  • будевийнкок
4.5.1.1 (28 октября 2022 г.)
  • Исправление: критическая ошибка в фильтре контента публикации
4.5.1 (27 октября 2022 г.)
  • Исправление: ошибка «Срок действия ссылки истек» в фильтре содержимого публикации
4.5.0 (13 октября 2022 г.)
  • Новое: добавление изображений на карту сайта Подробнее
  • Исправлено: устранены некоторые ошибки
4.4.3 (4 июля 2022 г.)
  • Новое: плагин теперь может создавать отсутствующие файлы, когда это необходимо, вместо повторной активации плагина
  • Исправлено: ДЕЙСТВИТЕЛЬНО добавлена ​​возможность удалить тег «changefreg» из карты сайта
  • Исправлено: запросы ALTER TABLE замедляли работу сайта в некоторых случаях
4.4.1 (2 февраля 2022 г.)
  • Новое: добавлена ​​возможность удалить тег «changefreg» из карты сайта
  • Новое: добавлено больше возможностей для автообновления
  • Исправление
  • : внесены небольшие улучшения в код
  • . Улучшение
  • : исправлена ​​небольшая проблема со стилем в WP5.9
4.4.0 (6 апреля 2021 г.)
  • Новое: ограничение количества сообщений, отображаемых в блоке на карте сайта HTML
  • Новое: возможность добавить ссылку на карту сайта XML в карту сайта HTML
  • Улучшено: исправлено перекрытие текстового поля robots
  • Улучшение: обновлены некоторые устаревшие функции до более новых функций
4.3.1 (9 декабря 2020 г.)
  • Исправлено: Ошибка при добавлении дополнительных страниц
  • Исправлено: Неопределенная переменная при сохранении настроек
4.3.0 (24 ноября 2020 г.)
  • Исправлено: иногда не сохранялись настройки
  • Исправление: иногда некоторые страницы не исключались
  • Исправление: URL-адреса перевода будут добавляться только в том случае, если перевод действительно опубликован
  • Примечание: мы внесли несколько значительных изменений в подключение к базе данных, сделав его лучше и безопаснее, но это означает, что некоторые настройки могут быть потеряны в процессе
4.
2.0 (11 июля 2020 г.)
  • Новое: мы можем уведомлять поисковые системы о внесенных изменениях
  • Улучшено: загружать таблицу стилей внешнего интерфейса только на странице карты сайта HTML, когда используется блок Гутенберга
  • Улучшение
  • : жестко запрограммированные заголовки в списке карты сайта больше не являются жестко запрограммированными
  • Исправлено: некоторые столбцы не отображались должным образом на мобильных устройствах
4.1.0 (11 марта 2020 г.)
  • Новое: улучшенная и понятная панель управления. Сюда же мы перенесли поддержку, настройки и редактор роботов
  • Новое: дополнительные страницы, добавьте страницы за пределами вашей установки WordPress в ваши карты сайта
  • Твик: Поддержка WordPress 5.4
  • Tweak: Незначительные улучшения безопасности
4.0.4 (10 января 2020 г.)
  • Исправлена ​​ошибка, из-за которой карта сайта не загружалась в серверной части
  • Различные улучшения безопасности
4.
0.3 (5 января 2020 г.)
  • Исправлена ​​ошибка, из-за которой иногда нельзя было снять флажок с элемента в фильтре содержимого
4.0.2 (4 января 2020 г.)
  • Исправлена ​​ошибка, из-за которой XML-карта сайта казалась пустой
  • Исправлена ​​ошибка, из-за которой иногда настройки не сохранялись.
4.0.1 (3 января 2020 г.)
  • Удален генератор коротких кодов в пользу блока Gutenberg
  • Настройки перенесены на новую вкладку «Настройки» и изменен дизайн панели инструментов
  • Вкладка «Исключение» переименована в «Контент-фильтр».
  • Исправлено несколько (незначительных) ошибок
  • Сделаны некоторые внутренние улучшения безопасности и производительности
4.0 (2 января 2020 г.)
  • Новое: мы добавили причудливый блестящий блок Гутенберга вместо короткого кода
  • .

Посмотреть полный журнал изменений

Мета

  • Версия: 4. 5.1.1
  • Последнее обновление: 7 дней назад
  • Активные установки: 9000+
  • Версия WordPress: 4.6.0 или выше
  • Протестировано до: 6.0.3
  • Языки:

    хорватский, голландский, английский (США), японский, испанский (Колумбия), испанский (Эквадор), испанский (Мексика), испанский (Испания) и испанский (Венесуэла).

    Перевести на ваш язык

  • Теги:

    генераторhtmlроботыsitemappxml

  • Расширенный вид

Служба поддержки

Проблемы, решенные за последние два месяца:

2 из 3

Посмотреть форум поддержки

Пожертвовать

Хотите поддержать продвижение этого плагина?

Пожертвовать этому плагину

Генератор карты сайта

По возможности отдавайте предпочтение функции карты сайта в основных компонентах AEM WCM.

Создайте XML-файл Sitemap с синтаксисом, определенным http://www. sitemaps.org/.

Чтобы использовать эту функцию, у вас должен быть компонент страницы «домашняя страница», например. geometrixx/components/homepage . Определив тип ресурса для этого компонента страницы, настройте новый экземпляр сервлета com.adobe.acs.commons.wcm.impl.SiteMapServlet с типом ресурса и, при необходимости, доменным именем, настроенным в компоненте Externalizer. .

См. https://helpx.adobe.com/experience-manager/6-5/sites/developing/using/externalizer.html для получения дополнительной информации о настройке Externalizer.

После настройки карта сайта может быть сгенерирована путем запроса страницы настроенного типа ресурса с помощью селектора карты сайта и расширения xml . Карта сайта будет содержать текущую страницу и все дочерние страницы, пропуская страницы, для которых включен флаг «Скрыть в навигации».

Как правило, вы также захотите использовать сопоставления Resource Resolver или правила mod_rewrite в Apache, чтобы сделать карту сайта доступной по пути sitemap. xml в корне вашего домена.

/apps/mysite/config/com.adobe.acs.commons.wcm.impl.SiteMapServlet-sample.xml

 
 
Начиная с версии 2.1.0
  • include.lastmod Если true, в карту сайта будет включено последнее измененное значение. По умолчанию false .

  • changefreq.properties Набор имен свойств JCR, которые будут содержать значение частоты изменений. По умолчанию нет.

  • priority.properties Набор имен свойств JCR, которые будут содержать значение приоритета. По умолчанию нет.

Начиная с версии 2.3.0
Начиная с версии 2.7.0/3.3.0
  • exclude.property Имя свойства [cq:Page]/jcr:content , которое, если оценивается как true, исключает страницу из карты сайта. По умолчанию используется обратно совместимое имя свойства hideInNav , что позволяет флажку «Скрыть в навигации» контролировать, будет ли страница исключена из карты сайта.
    • Чтобы игнорировать все свойства, установите несуществующее свойство: exclude.property=null , так как это всегда будет оцениваться как false
Начиная с версии 2.11.0/3.8.0
  • character.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *