176 lines
5.8 KiB
Bash
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
|