Доступ до вихідного коду відкрито з нашого репозиторію. Завантажити окремий додаток можна звідси.
Contents
Що таке Sitemap?
Sitemap – це набір посиланнь на сторінки сайту. Власник сайту повинен додати найважливіші сторінки з додатковою інформацією (коефіцієнт пріоритету, дата зміни, частота змін) до Sitemap. Як зазначено у описі протоколу Sitemap:
Використання Sitemap протоколу не гарантує, що сторінки сайту будуть проіндексовані та використані пошуковими системами, але дає натяки веб-краулерам для задовільної роботи зі сторінками.
Як створити sitemap?
Щоб створити сайтмап, є наступні варіанти:
- Додати посилання до xml документу вручну
- Додати посилання до xml документу рекурсивно з допомогою веб-клієнта і html парсера
- використати плагін чи створити ендпоінт, що повертає xml документ (на різних веб-платформах по-різному)
Наостанок треба утвердити sitemap у пошуковій консолі. Інакше пошукові системи не зареєструють його.
Додаток для створення сайтмапу у форматі xml на .Net Core C#
Доданок дає можливість створити сайтмап для сайту з необмеженою кількістю сторінок.
Додаток відвідує посилання у порядку їх відображення на сторінці. Тому, якщо певне посилання відсутнє на всіх сторінках сайту, то певна сторінка не буде додана до сайтмапу.
Структура генератору сайтмапу
Весь вихідний код зберігається у нашому репозиторію. Тут наведено спрощений варіант.
У додатку дві головних функціональних частини:
Менеджер краулінгу
- перейти на головну сторінку, отримати посилання з html коду
- зберегти відвідане посилання, збереги отримані посилання (окрім відвіданих)
- перейти на кожне збережене посилання, отримати посилання з html коду
- зберегти відвідане посилання, зберегти отримані посилання (окрім відвіданих)
- продовжувати цикл поки виключення відвіданих з отриманих не дорівнюватиме пустому списку
... List new_urls = new List(); List visited = new List(); ... new_urls.Add(BaseUrl); //перше посилання do { List hrefs=new List(); foreach (var url in new_urls) { string text =await _loader.Get(url); if (string.IsNullOrEmpty(text)) continue; visited.Add(url); List meta=Parser.GetAHrefs(text).Distinct().ToList(); //отримання посилань з хтмл коду Parser.Normalize(Domain,url,ref meta); if (Exclude) //option to exclude query from url meta = meta.Select(u => u.Contains('?') ? u.Split('?')[0] : u).ToList(); hrefs.AddRange(meta); hrefs = hrefs.Distinct().ToList(); } new_urls = hrefs.Except(visited).ToList(); //виключення відвіданих посилань } while (new_urls.Count != 0); ...
HTML парсінг
Для HTML парсінгу використовується HtmlAgilityPack.
... public static IEnumerable GetAHrefs(string text) { HtmlDocument document = new HtmlDocument(); document.LoadHtml(text); var tags=document.DocumentNode.SelectNodes(".//*"); foreach(var tag in tags) { if (tag.Name == "a" ) { string href = tag.GetAttributeValue("href", string.Empty); if (!string.IsNullOrEmpty(href)) yield return href; } } } ...
Інтерфейс додатку
- Адреса головної сторінки потрібного сайту
- Доменне ім’я сайту
- Можливість додати необов’язкові дані до сайтмапу
- Прибрати параметри заспиту з адреси