Додаток для створення Sitemap

Доступ до вихідного коду відкрито з нашого репозиторію. Завантажити окремий додаток можна звідси.

Що таке Sitemap?

sitemap
Sitemap – це набір посиланнь на сторінки сайту. Власник сайту повинен додати найважливіші сторінки з додатковою інформацією (коефіцієнт пріоритету, дата зміни, частота змін) до Sitemap. Як зазначено у описі протоколу Sitemap:

Використання Sitemap протоколу не гарантує, що сторінки сайту будуть проіндексовані та використані пошуковими системами, але дає натяки веб-краулерам для задовільної роботи зі сторінками.

Як створити sitemap?

Щоб створити сайтмап, є наступні варіанти:

  • Додати посилання до xml документу вручну
  • Додати посилання до xml документу рекурсивно з допомогою веб-клієнта і html парсера
  • використати плагін чи створити ендпоінт, що повертає xml документ (на різних веб-платформах по-різному)

Наостанок треба утвердити sitemap у пошуковій консолі. Інакше пошукові системи не зареєструють його.

Додаток для створення сайтмапу у форматі xml на .Net Core C#

Доданок дає можливість створити сайтмап для сайту з необмеженою кількістю сторінок.

Додаток відвідує посилання у порядку їх відображення на сторінці. Тому, якщо певне посилання відсутнє на всіх сторінках сайту, то певна сторінка не буде додана до сайтмапу.

Структура генератору сайтмапу

Весь вихідний код зберігається у нашому репозиторію. Тут наведено спрощений варіант.
У додатку дві головних функціональних частини:

Менеджер краулінгу
  1. перейти на головну сторінку, отримати посилання з html коду
  2. зберегти відвідане посилання, збереги отримані посилання (окрім відвіданих)
  3. перейти на кожне збережене посилання, отримати посилання з html коду
  4. зберегти відвідане посилання, зберегти отримані посилання (окрім відвіданих)
  5. продовжувати цикл поки виключення відвіданих з отриманих не дорівнюватиме пустому списку
...
   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;
         }
      }
   }
...
Інтерфейс додатку

sitemapgenerator

  • Адреса головної сторінки потрібного сайту
  • Доменне ім’я сайту
  • Можливість додати необов’язкові дані до сайтмапу
  • Прибрати параметри заспиту з адреси

Залишити відповідь