Что это за модель
Идея проста: страница, на которую ссылаются много других важных страниц, получает больше «веса». Этот вес затем делится между ссылками, которые она сама отдаёт. Модель повторяет принцип, на котором были основаны ранние алгоритмы оценки ссылок. Важная оговорка: это упрощённая учебная модель, а не показатель поисковой системы. Реальные алгоритмы намного сложнее и используют множество других факторов. Но для сравнения страниц одного сайта между собой модель полезна.
Как посчитать
- Выгрузите краулером список внутренних ссылок: откуда — куда.
- Постройте граф: страницы — узлы, ссылки — рёбра.
- Запустите итерационный расчёт: вес каждой страницы делится поровну между её исходящими ссылками.
- Отсортируйте страницы по результату и сопоставьте с приоритетами.
def pagerank(links, d=0.85, iterations=30):
pages = list(links)
n = len(pages)
rank = {p: 1.0 / n for p in pages}
for _ in range(iterations):
new = {p: (1 - d) / n for p in pages}
for page, outs in links.items():
if not outs:
continue
share = rank[page] / len(outs)
for target in outs:
new[target] += d * share
rank = new
return rank
Словарь links хранит для каждой страницы список адресов, на которые она ссылается. Все целевые страницы должны присутствовать в словаре как ключи.
Как читать результат
| Наблюдение | Что означает | Что сделать |
|---|---|---|
| Важная страница внизу списка | Мало входящих ссылок из сильных страниц | Добавить ссылки из главной и хабов |
| Неважные страницы в верхней части | Сквозные блоки перекачивают внимание на них | Пересмотреть шаблоны и меню |
| Страницы с нулевым значением | Нет входящих ссылок — сироты | Связать с разделами: как искать сирот |
| Резкий перекос в пользу главной | Ссылки идут в основном с главной | Развивать перелинковку внутри разделов |
Ограничения модели
- Не учитывается положение ссылки на странице и её заметность.
- Не учитываются внешние ссылки на страницы.
- Не различаются тематика и качество страниц.
- Результат — относительный порядок страниц, а не абсолютные числа.
Используйте как ориентир. Расчёт помогает найти очевидные перекосы, но окончательные решения принимайте вместе с данными об индексации и трафике. Про распределение внимания по глубине — в статье про глубину перелинковки, про метрики структуры — в материале про метрики качества структуры.
Пример на маленьком сайте
links = {
"home": ["catalog", "blog"],
"catalog": ["home", "sofa", "bed"],
"blog": ["home", "sofa"],
"sofa": ["catalog"],
"bed": ["catalog"],
}
for page, value in sorted(pagerank(links).items(), key=lambda x: -x[1]):
print(page, round(value, 3))
Результат покажет, что каталог и главная получают больше всего внимания, диван — заметно больше кровати, потому что на него ссылаются и категория, и статья. Именно так с помощью небольшого расчёта можно увидеть, какие страницы получают мало ссылок относительно своей важности. Для реального сайта на входе будут тысячи строк из краулера, а принцип остаётся тем же.
Частые вопросы
Можно ли узнать точный вес страницы?
Нет: поисковые системы не раскрывают свои расчёты; упрощённая модель помогает лишь сравнивать страницы сайта между собой.
Зачем считать вес внутри сайта?
Чтобы увидеть, какие важные страницы получают мало внутренних ссылок, и какие второстепенные страницы перетягивают внимание.
Что делать со страницами, у которых расчётный вес близок к нулю?
Проверить, нет ли у них входящих ссылок; если это нужные страницы, связать их с разделами и хабами.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.