Возникает ситуации, при которых нам нужно получить список абсолютно всех ссылок на нашем сайте. Если у вас 1 карта сайта — то в этом нет ничего сложного, а вот если у вас их несколько, то могут возникнуть проблемы, так как займет много времени.У меня есть сайт, на котором карта сайта формируется плагином All in One SEO. Карта разбита на много карт, в каждой из которых по 5000 урлов, всего около 50 карт. Сделано это так для того, чтобы поисковики нормально их воспринимали, т.к. если карты слишком большие, то иногда они не могут прочитать их. Открывать каждую, чтобы получить список адресов и соеденить это всё в 1 таблицу — дело довольно сложное и нудное.
Решение как получить все ссылки:
Устанавливаем PowerShell, если у вас его нет (сейчас вроде везде он есть).
Откройте PowerShell (Win + R → powershell → Enter) и вставьте целиком:
# Перейти на рабочий стол
cd $HOME\Desktop# Базовый адрес сайта (без слеша в конце)
$baseUrl = «https://site.ru»# Список всех sitemap’ов
$sitemaps = @()
$sitemaps += «$baseUrl/post-sitemap.xml»
2..34 | ForEach-Object { $sitemaps += «$baseUrl/post-sitemap$_.xml» }
$sitemaps += «$baseUrl/page-sitemap.xml»
$sitemaps += «$baseUrl/sfwd-courses-sitemap.xml»
$sitemaps += «$baseUrl/sfwd-lessons-sitemap.xml»
$sitemaps += «$baseUrl/sfwd-lessons-sitemap2.xml»
$sitemaps += «$baseUrl/sfwd-quiz-sitemap.xml»
$sitemaps += «$baseUrl/sfwd-quiz-sitemap2.xml»
$sitemaps += «$baseUrl/post-archive-sitemap.xml»
$sitemaps += «$baseUrl/category-sitemap.xml»# Скачать и извлечь URL
$allUrls = New-Object System.Collections.Generic.HashSet[string]
$i = 0
foreach ($url in $sitemaps) {
$i++
Write-Host «[$i/$($sitemaps.Count)] Загружаю $url …»
try {
$content = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 120 | Select-Object -ExpandProperty Content
$matches = [regex]::Matches($content, ‘<loc><!\[CDATA\[([^\]]+)\]\]></loc>’)
foreach ($m in $matches) {
$null = $allUrls.Add($m.Groups[1].Value)
}
Write-Host » Найдено URL в файле: $($matches.Count). Всего уникальных: $($allUrls.Count)»
} catch {
Write-Warning » Ошибка при загрузке $url : $_»
}
}# Сохранить в файл (UTF-8 без BOM)
$sortedUrls = $allUrls | Sort-Object
[System.IO.File]::WriteAllLines(«$HOME\Desktop\urls.txt», $sortedUrls)Write-Host «»
Write-Host «Готово! Сохранено $($allUrls.Count) уникальных URL в $HOME\Desktop\urls.txt» -ForegroundColor Green
В начале добавлена переменная $baseUrl = "https://site.ru" — меняешь только её, и весь скрипт работает с новым сайтом.
Что делает скрипт:
Скачивает все 41 sitemap по очереди
Показывает прогресс в консоли ([3/41] Загружаю …)
Извлекает URL регуляркой из тегов <loc>
Складывает в HashSet — дубликаты убираются автоматически
Сортирует и сохраняет в urls.txt на рабочем столе
Время работы: примерно 3–10 минут в зависимости от скорости отклика сайта.
Если сайт даст ошибку на каком-то sitemap — скрипт не упадёт, а напишет warning и пойдёт дальше. После завершения можно перезапустить — он повторно скачает всё.
На выходе: файл urls.txt на рабочем столе, ~178 000 URL, по одному на строку.