CoderCastrov logo
CoderCastrov
Поисковая оптимизация

Jupyter-ноутбук / Скрипт на Python для исследования подкаталогов веб-сайта на основе данных XML-карты сайта. Запуск в Google Colab (если вы хотите).

Jupyter-ноутбук / Скрипт на Python для исследования подкаталогов веб-сайта на основе данных XML-карты сайта. Запуск в Google Colab (если вы хотите).
просмотров
3 мин чтение
#Поисковая оптимизация

Иногда SEO-специалисты ищут обзор структуры подкаталогов / разделов веб-сайта. Этот Jupyter-ноутбук может быть отправной точкой для получения списка всех подкаталогов и количества статей в каталоге.

Почему проверять структуру подкаталогов веб-сайта

Иерархически упорядоченный веб-сайт с разумной структурой является своего рода лучшей практикой SEO, которая помогает пользователям и ботам группировать контент и находить путь внутри вашего сайта. Время от времени (или если вы берете на себя новый проект), вы хотите проверить, имеет ли эта структура (по-прежнему) смысл. Если эту проверку не проводили некоторое время, ожидайте забытых / устаревших подкаталогов, которые нарушают вашу хорошую структуру веб-сайта.

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

О выводе скрипта

Скрипт может сгенерировать что-то подобное на основе XML-карты сайта.

Вы получите CSV-список полных URL-адресов каждого подкаталога, пример URL-адреса внутри каталога, некоторое количество информации о том, насколько глубоко вы находитесь в иерархии, и каждый подкаталог, разделенный по уровням.

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

Другой пример вывода: https://docs.google.com/spreadsheets/d/1SBW3rMp3OxUOWNyAn8iS2ORx2I4xFaTTFeP0M6RDi_g/edit?usp=sharing

Как использовать скрипт

Это jupyter notebook. Я добавил много комментариев ... пожалуйста, свяжитесь со мной, если что-то не работает.

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

👉👉👉 Скрипт

Вы можете скачать его здесь или запустить копию непосредственно в Google Colab (рекомендуется)

XML_Sitemap_+_group_by_section.ipynb в Google Colaboratory

Редактировать описание

colab.research.google.com

Как настроить

Вам нужно определить 5 вещей:

sitemaps = ['[https://www.blick.ch/video.xml','https://www.blick.ch/image.xml','https://www.blick.ch/article.xml'](https://www.blick.ch/video.xml','https://www.blick.ch/image.xml','https://www.blick.ch/article.xml')]
  1. Регулярное выражение для обнаружения подкаталога
pattern = '(.*?)\/' #Получить подкаталог

Для URL-адреса https://www.blick.ch/life/essen/rezept/schnelle-rezepte-so-einfach-bereiten-sie-couscous-richtig-zu-id15838923.html это может получить "life" в качестве подкаталога уровня 1, если использовать его так, как указано ниже в коде (проверьте здесь)

dfSitemap['L1'] = dfSitemap['loc'].str.extract('http[s]:\/\/.*?\/' + pattern, expand=False)
  1. Регулярное выражение для обнаружения полного URL-адреса подкаталога
_patternPath = '^(.*[\\\/])'_

Для URL-адреса https://www.blick.ch/life/essen/rezept/schnelle-rezepte-so-einfach-bereiten-sie-couscous-richtig-zu-id15838923.html это получает https://www.blick.ch/life/essen/rezept/ Используется следующим образом:

dfSitemap['SubdirURL'] = dfSitemap['loc'].str.extract(patternPath, expand=False)
  1. Название бренда для имен файлов ... (необязательно)
_brandname = 'Blick'_
  1. Есть переменная для тестирования. Если вы добавите, например, 5 здесь, он просто протестирует 5 подкарт подкарты индекса. 0 протестирует все карты сайта.
maxSubsitemapsToCrawl = 0

Примеры конфигураций:

Тест без gzip

sitemaps = ['https://www.spiegel.de/sitemap.xml']
pattern = '(.*?)\/' 
patternPath = '^(.*[\\\/])' 
brandname = 'Spiegel'

Пример URL: https://www.spiegel.de/kultur/filme-fuer-die-corona-krise-lagerkollerfilme-a-34a730fe-6cd9-4064-b06e-d98cd17a47f2

Тест с gzip

sitemaps = ['https://www.blick.ch/video.xml','https://www.blick.ch/image.xml','https://www.blick.ch/article.xml']
pattern = '(.*?)\/' 
patternPath = '^(.*[\\\/])' 
brandname = 'Blick'

Пример URL: https://www.blick.ch/life/essen/rezept/schnelle-rezepte-so-einfach-bereiten-sie-couscous-richtig-zu-id15838923.html

mixed

sitemaps = ['https://www.welt.de/sitemaps/sitemap/sitemap.xml']
pattern = '(.*?)\/.*[0-9]{6,}.*?\/.*html' 
patternPath = '^(.*[\\\/]).*[0-9]{6,}.*' 
brandname = 'Welt'

Пример URL: https://www.welt.de/food/essen/article206809645/Kekse-backen-ohne-Mehl-Schoko-Cookies-mit-Meersalz.html

Пример проблемы с конфигурацией:

С URL, подобным https://www.welt.de/food/essen/article206809645/Kekse-backen-ohne-Mehl-Schoko-Cookies-mit-Meersalz.html, часть article206809645 на самом деле не является подкаталогом. Поэтому вам нужно использовать регулярное выражение, чтобы обнаружить и исключить их.

^(.*[\\\/])article[0-9]{6,}.*

может сделать это, чтобы получить настоящий URL подкаталога. Проверьте: https://regex101.com/r/ZZcusp/1 Жду комментариев о том, как сделать это более элегантно.

Я не пытался найти решение для https://www.theguardian.com/world/live/2020/apr/18/coronavirus-live-news-global-deaths-pass-150000-trump-china-china-denies-any-concealment-pence-origins-europe-germany, но "2020/apr/18" тоже нужно обработать...


Парсинг XML Sitemaps на Python

Внутри скрипта находится код для парсинга XML Sitemaps на Python.

Он способен обрабатывать несколько XML Sitemaps и индексных Sitemaps. Версии с gzip и без gzip. Он использует переменную "stop", чтобы не работать слишком долго во время тестирования. Основная обработка исключений.

Код сниппета здесь

Экспорт данных из Pandas DataFrame в Google Sheets (в Google Colab)

Я использую https://github.com/robin900/gspread-dataframe с функцией set_with_dataframe.

Код сниппета здесь

Почему использовать таблицу для визуализации структуры веб-сайта

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

Кроме того, если вы визуализировали структуру веб-сайта, у вас возникнут вопросы и данные для последующего анализа:

  • Сколько органических посещений генерирует эта секция по сравнению с другой?
  • Сколько статей находится в ней?
  • ...

Если вы хотите добавить дополнительные данные, таблицы подойдут.