Files
2026-08-28 10:11:11 -03:00

176 lines
5.8 KiB
Bash

#!/bin/bash
# Multi-Language Sitemap Generator for Odoo Expertos
# Generates sitemaps with hreflang annotations for ES (default), EN, DE, FR
DOMAIN="https://www.odoo-expertos.com"
TODAY=$(date +%Y-%m-%d)
LANGUAGES=("" "en" "de" "fr" "pt" "ar")
HREFLANGS=("es" "en" "de" "fr" "pt" "ar")
# Generate main sitemap index
cat << 'SITEMAP_INDEX_START' > sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.odoo-expertos.com/sitemap-es.xml</loc>
</sitemap>
<sitemap>
<loc>https://www.odoo-expertos.com/sitemap-en.xml</loc>
</sitemap>
<sitemap>
<loc>https://www.odoo-expertos.com/sitemap-de.xml</loc>
</sitemap>
<sitemap>
<loc>https://www.odoo-expertos.com/sitemap-fr.xml</loc>
</sitemap>
<sitemap>
<loc>https://www.odoo-expertos.com/sitemap-pt.xml</loc>
</sitemap>
<sitemap>
<loc>https://www.odoo-expertos.com/sitemap-ar.xml</loc>
</sitemap>
</sitemapindex>
SITEMAP_INDEX_START
# Function to generate hreflang entries for a given path
generate_hreflang() {
local base_path="$1"
echo " <xhtml:link rel=\"alternate\" hreflang=\"es\" href=\"${DOMAIN}${base_path}\" />"
echo " <xhtml:link rel=\"alternate\" hreflang=\"en\" href=\"${DOMAIN}/en${base_path}\" />"
echo " <xhtml:link rel=\"alternate\" hreflang=\"de\" href=\"${DOMAIN}/de${base_path}\" />"
echo " <xhtml:link rel=\"alternate\" hreflang=\"fr\" href=\"${DOMAIN}/fr${base_path}\" />"
echo " <xhtml:link rel=\"alternate\" hreflang=\"pt\" href=\"${DOMAIN}/pt${base_path}\" />"
echo " <xhtml:link rel=\"alternate\" hreflang=\"ar\" href=\"${DOMAIN}/ar${base_path}\" />"
echo " <xhtml:link rel=\"alternate\" hreflang=\"x-default\" href=\"${DOMAIN}${base_path}\" />"
}
# Function to generate sitemap for a specific language
generate_lang_sitemap() {
local lang="$1"
local lang_prefix="$2"
local sitemap_file="sitemap-${lang}.xml"
cat << SITEMAP_HEADER > "$sitemap_file"
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
SITEMAP_HEADER
# Homepage
cat << HOMEPAGE >> "$sitemap_file"
<url>
<loc>${DOMAIN}${lang_prefix}/</loc>
<lastmod>${TODAY}</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
$(generate_hreflang "/")
</url>
HOMEPAGE
# Main category pages
for category in "odoo" "odoo-hosting" "odoo-ia"; do
cat << CATEGORY >> "$sitemap_file"
<url>
<loc>${DOMAIN}${lang_prefix}/${category}/</loc>
<lastmod>${TODAY}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
$(generate_hreflang "/${category}/")
</url>
CATEGORY
done
# Content pages for this language
if [ -z "$lang_prefix" ]; then
# Spanish (root) - scan existing content
find . -name "*.html" -type f | grep -E "^./odoo|^./odoo-hosting|^./odoo-ia" | grep -v test-files | grep -v "^./en" | grep -v "^./de" | grep -v "^./fr" | while read file; do
path=$(echo "$file" | sed 's|^\./||' | sed 's|/index\.html$|/|' | sed 's|\.html$|.html|')
# Skip category index pages (already added above)
if [[ "$path" == "odoo/" || "$path" == "odoo-hosting/" || "$path" == "odoo-ia/" ]]; then
continue
fi
depth=$(echo "$path" | tr -cd '/' | wc -c)
if [ $depth -le 2 ]; then
priority="0.8"
else
priority="0.7"
fi
cat << URL >> "$sitemap_file"
<url>
<loc>${DOMAIN}/${path}</loc>
<lastmod>${TODAY}</lastmod>
<changefreq>monthly</changefreq>
<priority>${priority}</priority>
$(generate_hreflang "/${path}")
</url>
URL
done
else
# Other languages - scan their directories
if [ -d ".${lang_prefix}" ]; then
find ".${lang_prefix}" -name "*.html" -type f | while read file; do
# Get path relative to language directory
rel_path=$(echo "$file" | sed "s|^\.${lang_prefix}/||" | sed 's|/index\.html$|/|' | sed 's|\.html$|.html|')
base_path="/${rel_path}"
depth=$(echo "$rel_path" | tr -cd '/' | wc -c)
if [ $depth -le 2 ]; then
priority="0.8"
else
priority="0.7"
fi
cat << URL >> "$sitemap_file"
<url>
<loc>${DOMAIN}${lang_prefix}/${rel_path}</loc>
<lastmod>${TODAY}</lastmod>
<changefreq>monthly</changefreq>
<priority>${priority}</priority>
$(generate_hreflang "${base_path}")
</url>
URL
done
fi
fi
# Legal pages (only for main Spanish sitemap)
if [ -z "$lang_prefix" ]; then
for page in "cookie-policy" "legal-notice" "privacy-policy" "terms-of-use"; do
cat << LEGAL >> "$sitemap_file"
<url>
<loc>${DOMAIN}/${page}.html</loc>
<lastmod>${TODAY}</lastmod>
<changefreq>yearly</changefreq>
<priority>0.3</priority>
</url>
LEGAL
done
fi
# Close sitemap
echo "</urlset>" >> "$sitemap_file"
url_count=$(grep -c '<url>' "$sitemap_file")
echo "Generated $sitemap_file with $url_count URLs"
}
# Generate sitemaps for each language
generate_lang_sitemap "es" ""
generate_lang_sitemap "en" "/en"
generate_lang_sitemap "de" "/de"
generate_lang_sitemap "fr" "/fr"
generate_lang_sitemap "pt" "/pt"
generate_lang_sitemap "ar" "/ar"
# Summary
echo ""
echo "=== Sitemap Generation Complete ==="
echo "Main sitemap index: sitemap.xml"
for lang in "es" "en" "de" "fr" "pt" "ar"; do
echo " - sitemap-${lang}.xml: $(grep -c '<url>' sitemap-${lang}.xml) URLs"
done