generate_sitemap.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import os
  2. from datetime import datetime
  3. # Настройки
  4. DOMAIN = "https://radionica3d.me"
  5. LANGUAGES = ["en", "me", "ru", "ua"]
  6. # Список публичных страниц (без учета языка)
  7. PAGES = [
  8. "",
  9. "portfolio",
  10. "about",
  11. "blog",
  12. "contact",
  13. "help",
  14. "guidelines",
  15. "privacy",
  16. "terms",
  17. "careers"
  18. ]
  19. def generate_sitemap():
  20. xml = ['<?xml version="1.0" encoding="UTF-8"?>']
  21. xml.append('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">')
  22. # Добавляем каждую страницу для каждого языка
  23. for page in PAGES:
  24. for lang in LANGUAGES:
  25. # Формируем путь: /lang/page (если page пустая, то просто /lang/)
  26. path = f"/{lang}/{page}" if page else f"/{lang}/"
  27. # Приоритеты
  28. if page == "":
  29. priority = "1.0"
  30. freq = "weekly"
  31. elif page in ["portfolio", "blog"]:
  32. priority = "0.8"
  33. freq = "daily"
  34. else:
  35. priority = "0.5"
  36. freq = "monthly"
  37. url = f"{DOMAIN}{path}"
  38. xml.append(' <url>')
  39. xml.append(f' <loc>{url}</loc>')
  40. xml.append(f' <lastmod>{datetime.now().strftime("%Y-%m-%d")}</lastmod>')
  41. xml.append(f' <changefreq>{freq}</changefreq>')
  42. xml.append(f' <priority>{priority}</priority>')
  43. # Добавляем ссылки на альтернативные языковые версии
  44. for alt_lang in LANGUAGES:
  45. alt_path = f"/{alt_lang}/{page}" if page else f"/{alt_lang}/"
  46. xml.append(f' <xhtml:link rel="alternate" hreflang="{alt_lang}" href="{DOMAIN}{alt_path}"/>')
  47. # x-default (пусть будет ME как основной или просто без префикса, но у нас роутер всегда редиректит)
  48. # В нашем случае x-default укажем на ME
  49. xml.append(f' <xhtml:link rel="alternate" hreflang="x-default" href="{DOMAIN}/me/{page if page else ""}"/>')
  50. xml.append(' </url>')
  51. xml.append('</urlset>')
  52. content = "\n".join(xml)
  53. # Путь к public/sitemap.xml
  54. # Скрипт лежит в scripts/, так что идем на уровень выше
  55. root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  56. sitemap_path = os.path.join(root_dir, "public", "sitemap.xml")
  57. with open(sitemap_path, "w", encoding="utf-8") as f:
  58. f.write(content)
  59. print(f"Sitemap generated with {len(PAGES) * len(LANGUAGES)} URLs at {sitemap_path}")
  60. if __name__ == "__main__":
  61. generate_sitemap()