Как стать автором
Поиск
Написать публикацию
Обновить

Wiki-хак для SEO: находим брошенные домены и передаём их силу вашему сайту

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров3.7K

В мире SEO побеждает тот, кто умеет находить нестандартные источники ссылочного веса. Один из таких способов — найти брошенные домены, на которые ссылается Wikipedia, и с помощью редиректа (301) перелить авторитет (link juice) на свой ресурс. Это работает — и не противоречит рекомендациям поисковых систем, если всё сделано грамотно.

В этой статье:

  • Расскажем, как работает метод перелива веса с Wikipedia через редирект.

  • Разберем готовый Python-скрипт для автоматического поиска таких доменов.

  • Дадим рекомендации по дальнейшей работе с найденными доменами.

А в своем Телеграм канале пишу еще больше про всякое из реального маркетинга.

Что такое перелив веса с Wikipedia

Wikipedia — один из самых авторитетных сайтов в интернете. Если она ссылается на сторонний ресурс, часть ее SEO-авторитета передается по этой ссылке (несмотря на nofollow — часть сигнала все равно улавливается). Но что, если этот ресурс больше не существует, а домен свободен для регистрации?

Вот что можно сделать:

  1. Найти такие несуществующие домены, на которые ссылается Wikipedia.

  2. Зарегистрировать их.

  3. Сделать 301-редирект на ваш сайт или нужную статью.

  4. Получить ссылочный вес (и, возможно, трафик) с Wikipedia без необходимости покупать ссылки или просить добавления новых.

Python-скрипт: автоматический сбор брошенных доменов из Wikipedia

Скрипт, представленный ниже, выполняет весь цикл:

  1. Ищет статьи Wikipedia по ключевым словам

  2. Извлекает внешние ссылки со страниц

  3. Извлекает домены из ссылок

  4. Проверяет, свободен ли домен для регистрации

  5. Сохраняет результаты в CSV-файл

import wikipediaapi
import requests
from urllib.parse import urlparse
from bs4 import BeautifulSoup
import time
import whois
import socket
import dns.resolver
import csv
import logging
import random

# Настройка логирования
logging.basicConfig(
    filename='domain_checker.log',
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

def search_wikipedia(keywords):
    """
    Ищет страницы Википедии по заданным ключевым словам.

    :param keywords: Список ключевых слов для поиска.
    :return: Список кортежей (ключевое слово, название страницы, URL страницы).
    """
    user_agent = "MyWikiParser/1.0 (your_email@example.com)"
    wiki_wiki = wikipediaapi.Wikipedia(
        language='ru',
        extract_format=wikipediaapi.ExtractFormat.WIKI,
        user_agent=user_agent
    )

    results = []

    for keyword in keywords:
        page = wiki_wiki.page(keyword)
        if page.exists():
            # Проверка наличия любого из ключевых слов в тексте страницы (без учета регистра)
            if any(word.lower() in page.text.lower() for word in keywords):
                results.append((keyword, page.title, page.fullurl))

    return results

def fetch_external_links(page_url):
    """
    Извлекает все внешние ссылки из HTML-кода страницы.

    :param page_url: URL страницы Википедии.
    :return: Множество внешних URL.
    """
    try:
        headers = {
            "User-Agent": "MyWikiParser/1.0 (your_email@example.com)"
        }
        response = requests.get(page_url, headers=headers, timeout=10)
        if response.status_code != 200:
            print(f"Не удалось загрузить страницу {page_url}: статус {response.status_code}")
            return set()

        soup = BeautifulSoup(response.text, 'html.parser')
        external_links = set()

        # Находим все теги <a> с href, начинающимися с http или https
        for a_tag in soup.find_all('a', href=True):
            href = a_tag['href']
            if href.startswith('http://') or href.startswith('https://'):
                external_links.add(href)

        return external_links
    except requests.exceptions.RequestException as e:
        print(f"Ошибка при загрузке страницы {page_url}: {e}")
        return set()

def check_domain_availability(domain):
    """
    Проверяет доступность домена для регистрации.

    :param domain: Доменное имя.
    :return: True, если домен доступен для регистрации, иначе False.
    """
    try:
        # WHOIS проверка
        w = whois.whois(domain)
        if isinstance(w.domain_name, list):
            domain_registered = any(domain.lower() == dn.lower() for dn in w.domain_name)
        elif isinstance(w.domain_name, str):
            domain_registered = domain.lower() in w.domain_name.lower()
        else:
            domain_registered = False
    except whois.parser.PywhoisError:
        domain_registered = False
    except socket.gaierror:
        domain_registered = False
    except Exception as e:
        logging.error(f"Ошибка WHOIS-запроса для {domain}: {e}")
        domain_registered = False

    if not domain_registered:
        try:
            answers = dns.resolver.resolve(domain, 'A')
            is_available = False  # Домен занят
        except dns.resolver.NXDOMAIN:
            is_available = True  # Домен свободен
        except dns.resolver.NoAnswer:
            is_available = True  # Домен свободен
        except dns.exception.Timeout:
            is_available = False  # Не удалось проверить, считаем занят
        except Exception as e:
            logging.error(f"Ошибка DNS-запроса для {domain}: {e}")
            is_available = False

        if is_available:
            logging.info(f"Домен {domain} доступен для регистрации.")
            return True
        else:
            logging.info(f"Домен {domain} занят.")
            return False
    else:
        logging.info(f"Домен {domain} занят.")
        return False

def get_domain(url):
    """
    Извлекает доменное имя из URL.

    :param url: Полный URL.
    :return: Доменное имя.
    """
    parsed_url = urlparse(url)
    return parsed_url.netloc

def save_results_to_csv(results, filename='available_domains.csv'):
    """
    Сохраняет результаты в CSV-файл.

    :param results: Список кортежей с результатами.
    :param filename: Имя файла для сохранения.
    """
    try:
        with open(filename, mode='w', newline='', encoding='utf-8') as file:
            writer = csv.writer(file)
            writer.writerow(["Ключевое слово", "Статья Wikipedia", "Ссылка", "Домен из ссылки"])
            for result in results:
                writer.writerow(result)
    except IOError as e:
        logging.error(f"Ошибка записи в файл {filename}: {e}")

if __name__ == "__main__":
    keywords = ["ERP"]

    pages = search_wikipedia(keywords)

    print("Проверка страниц и ссылок на свободные домены:")

    available_results = []

    for keyword, title, url in pages:
        print(f"\nСтраница: {title} ({url})")
        external_links = fetch_external_links(url)

        if not external_links:
            print("Нет внешних ссылок на этой странице.")
            continue

        for link in external_links:
            domain = get_domain(link)
            is_available = check_domain_availability(domain)

            if is_available:
                print(f"  - Ключевое слово: {keyword}, Ссылка: {link} (Домен: {domain})")
                available_results.append((keyword, title, link, domain))

            time.sleep(random.uniform(0.5, 1.5))

    if available_results:
        save_results_to_csv(available_results)
        print("\nРезультаты сохранены в available_domains.csv")
    else:
        print("\nНет доступных доменов для регистрации среди внешних ссылок.")

Пример работы

Допустим, вы вводите ключевое слово ERP. Скрипт:

  • Находит статью "ERP" на ru.wikipedia.org

  • Парсит HTML страницы и извлекает все внешние ссылки

  • Из каждой ссылки получает домен (например, old-softwaresolutions.com)

  • Проверяет по WHOIS и DNS, занят ли домен

  • Если домен свободен — добавляет его в список

Разберем подробно каждую часть скрипта для сбора брошенных доменов с Wikipedia — с пояснениями, что и зачем делает каждая функция:

Импорты и настройки

import wikipediaapi
import requests
from urllib.parse import urlparse
from bs4 import BeautifulSoup
import time
import whois
import socket
import dns.resolver
import csv
import logging
import random

Что подключается:

  • wikipediaapi — API-клиент для Wikipedia

  • requests — для загрузки HTML-страниц

  • urlparse — извлечение домена из URL

  • BeautifulSoup — парсинг HTML, вытаскиваем внешние ссылки

  • whois — проверка занятости домена

  • dns.resolver — проверка DNS-записей домена

  • csv — сохранение результатов

  • logging — логирование в файл

  • random, time — случайная пауза между запросами, чтобы не попасть под блок

Настройка логгера

logging.basicConfig(
    filename='domain_checker.log',
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

Создает лог-файл domain_checker.log, куда пишутся сообщения — успехи, ошибки, проблемы соединения и т.д.

Поиск статей Wikipedia по ключевым словам

def search_wikipedia(keywords):
    ...

Что делает:

  • Инициализирует wikipediaapi для русской Википедии

  • Для каждого ключевого слова:

    • Получает страницу

    • Проверяет, существует ли она

    • Проверяет, есть ли в тексте ключевое слово

    • Возвращает список из кортежей: (ключевое слово, название статьи, ссылка)

Извлечение внешних ссылок с Wikipedia

def fetch_external_links(page_url):
    ...

Что делает:

  • Загружает HTML-страницу Wikipedia

  • Использует BeautifulSoup для поиска всех ссылок <a href="...">

  • Фильтрует только внешние ссылки (начинаются с http:// или https://)

  • Возвращает set() ссылок

Извлечение домена из URL

def get_domain(url):
    parsed_url = urlparse(url)
    return parsed_url.netloc

Что делает:

Проверка доступности домена

def check_domain_availability(domain):
    ...

Двухступенчатая проверка:

  1. WHOIS — проверяет, зарегистрирован ли домен

    • Если WHOIS показывает, что домен не зарегистрирован, переходит ко второму шагу

  2. DNS — проверка наличия A-записи

    • Если DNS возвращает NXDOMAIN или NoAnswer → домен точно свободен

    • В остальных случаях — занят или не удалось проверить

Результат: True, если домен можно зарегистрировать

Сохранение результатов в CSV

def save_results_to_csv(results, filename='available_domains.csv'):
    ...

Сохраняет итоговые результаты (только свободные домены) в CSV-файл:

  • Ключевое слово

  • Название статьи

  • Ссылка

  • Домен

Главный цикл запуска скрипта

if __name__ == "__main__":
    ...

Что происходит:

  1. Задает ключевые слова (keywords = ["ERP"])

  2. Находит статьи Wikipedia по этим ключевым словам

  3. Для каждой статьи:

    • Парсит внешние ссылки

    • Извлекает домены

    • Проверяет их доступность

  4. Если находит свободный домен:

    • Добавляет в available_results

  5. В конце сохраняет всё в available_domains.csv

Между проверками стоит пауза random.uniform(0.5, 1.5) — чтобы не попасть под антибот-защиту.

SEO-применение: как перелить вес правильно

1. Зарегистрируйте домен

После того как скрипт найдет доступный домен, зарегистрируйте его у любого регистратора. Цена обычного .com, .org, .ru — от 100 до 500 ₽/год.

2. Настройте 301 редирект

На хостинге или через .htaccess настройте перенаправление:

Redirect 301 / https://your-site.ru/

Или через Nginx:

server {
    server_name old-domain.com;
    return 301 https://your-site.ru$request_uri;
}

3. Оптимизируйте целевую страницу

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

Важные рекомендации

Совет

Обоснование

Не регистрируйте сотни доменов сразу

Google может расценить это как сетку PBN

Не редиректите всё на одну страницу

Используйте тематические посадочные — для естественности

Проверяйте историю домена (через Wayback Machine)

Возможно, ранее он использовался под спам

Следите за индексацией

Новые редиректы могут не сразу попасть в индекс

Дополнительные фишки

  • Можно расширить скрипт, чтобы он парсил Wikipedia на других языках (en, de, fr) — в англоязычных статьях ссылок и возможностей в разы больше.

  • Добавьте проверку на наличие домена в Archive.org или через ahrefs.com — чтобы видеть, был ли он проиндексирован ранее.

Заключение

Этот способ — не «серый» и не «чёрный» SEO, а умный перехват утраченного ссылочного веса. Вы не вмешиваетесь в Wikipedia, не просите проставить ссылку и не занимаетесь спамом. Вы просто регистрируете домен, на который кто-то раньше сослался, и аккуратно направляете трафик и вес туда, где он вам действительно нужен.

Используйте с умом. А если нужна помощь — напишите, помогу внедрить под конкретные задачи или проконсультировать и интегрировать в ваш SEO-процесс.

Теги:
Хабы:
-4
Комментарии12

Публикации

Ближайшие события