#33998: Use alternates and i18n generate duplicated URLs in the sitemap
-------------------------------------+-------------------------------------
     Reporter:  brenosss             |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  contrib.sitemaps     |                  Version:  4.0
     Severity:  Normal               |               Resolution:
     Keywords:  sitemap, i18n,       |             Triage Stage:
  alternates                         |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by brenosss:

Old description:

> If the i18n variable is set for True, the SiteMapClass generates a
> different URL for each item in LANGUAGES, but I'm using the alternates I
> expected to have only one URL for the default language and have the
> translations version in the alternates URLs.
>
> The current function:
>
> {{{
>     def _items(self):
>         if self.i18n:
>             # Create (item, lang_code) tuples for all items and
> languages.
>             # This is necessary to paginate with all languages already
> considered.
>             items = [
>                 (item, lang_code)
>                 for lang_code in self._languages()
>                 for item in self.items()
>             ]
>             return items
>         return self.items()
> }}}
>
> This is a e.g of a result:
>
> {{{
> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";
> xmlns:xhtml="http://www.w3.org/1999/xhtml";>
>     <url>
>         <loc>https://example.com/en/contact</loc>
>         <changefreq>weekly</changefreq>
>         <priority>0.5</priority>
>         <xhtml:link rel="alternate" hreflang="en"
> href="https://example.com/en/contact"; />
>         <xhtml:link rel="alternate" hreflang="es"
> href="https://example.com/es/contact"; />
>         <xhtml:link rel="alternate" hreflang="el"
> href="https://example.com/el/contact"; />
>     </url>
>     <url>
>         <loc>https://example.com/es/contact</loc>
>         <changefreq>weekly</changefreq>
>         <priority>0.5</priority>
>         <xhtml:link rel="alternate" hreflang="en"
> href="https://example.com/en/contact"; />
>         <xhtml:link rel="alternate" hreflang="es"
> href="https://example.com/es/contact"; />
>         <xhtml:link rel="alternate" hreflang="el"
> href="https://example.com/el/contact"; />
>     </url>
>     <url>
>         <loc>https://example.com/el/contact</loc>
>         <changefreq>weekly</changefreq>
>         <priority>0.5</priority>
>         <xhtml:link rel="alternate" hreflang="en"
> href="https://example.com/en/contact"; />
>         <xhtml:link rel="alternate" hreflang="es"
> href="https://example.com/es/contact"; />
>         <xhtml:link rel="alternate" hreflang="el"
> href="https://example.com/el/contact"; />
>     </url>
> </urlset>
> }}}
>
> I propose to verify if the alternates is True and generate the items only
> for the default language:
>
> {{{
>     def _items(self):
>         if self.i18n:
>             if self.alternates:
>                 lang_code = self.default_lang or settings.LANGUAGE_CODE
>                 items = self.items()
>                 items = [
>                     # The url will be generated based on the default
> language the translations links will be added in the alternate links
>                     (item, lang_code)
>                     for item in items
>                 ]
>                 return items
>             # Create (item, lang_code) tuples for all items and
> languages.
>             # This is necessary to paginate with all languages already
> considered.
>             items = [
>                 (item, lang_code)
>                 for lang_code in self._languages()
>                 for item in self.items()
>             ]
>             return items
>         return self.items()
> }}}
>
> Then i expected a result more like:
> {{{
> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";
> xmlns:xhtml="http://www.w3.org/1999/xhtml";>
>     <url>
>         <loc>https://example.com/en/contact</loc>
>         <changefreq>weekly</changefreq>
>         <priority>0.5</priority>
>         <xhtml:link rel="alternate" hreflang="en"
> href="https://example.com/en/contact"; />
>         <xhtml:link rel="alternate" hreflang="es"
> href="https://example.com/es/contact"; />
>         <xhtml:link rel="alternate" hreflang="el"
> href="https://example.com/el/contact"; />
>     </url>
> </urlset>
> }}}
>
> This makes sense? can I start work on it?

New description:

 If the i18n variable is set for True, the SiteMapClass generates a
 different URL for each item in LANGUAGES, but I'm using the alternates so
 I expected to have only one URL for the default language and have the
 translations version in the alternates URLs.

 The current function:

 {{{
     def _items(self):
         if self.i18n:
             # Create (item, lang_code) tuples for all items and languages.
             # This is necessary to paginate with all languages already
 considered.
             items = [
                 (item, lang_code)
                 for lang_code in self._languages()
                 for item in self.items()
             ]
             return items
         return self.items()
 }}}

 This is a e.g of a result:

 {{{
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";
 xmlns:xhtml="http://www.w3.org/1999/xhtml";>
     <url>
         <loc>https://example.com/en/contact</loc>
         <changefreq>weekly</changefreq>
         <priority>0.5</priority>
         <xhtml:link rel="alternate" hreflang="en"
 href="https://example.com/en/contact"; />
         <xhtml:link rel="alternate" hreflang="es"
 href="https://example.com/es/contact"; />
         <xhtml:link rel="alternate" hreflang="el"
 href="https://example.com/el/contact"; />
     </url>
     <url>
         <loc>https://example.com/es/contact</loc>
         <changefreq>weekly</changefreq>
         <priority>0.5</priority>
         <xhtml:link rel="alternate" hreflang="en"
 href="https://example.com/en/contact"; />
         <xhtml:link rel="alternate" hreflang="es"
 href="https://example.com/es/contact"; />
         <xhtml:link rel="alternate" hreflang="el"
 href="https://example.com/el/contact"; />
     </url>
     <url>
         <loc>https://example.com/el/contact</loc>
         <changefreq>weekly</changefreq>
         <priority>0.5</priority>
         <xhtml:link rel="alternate" hreflang="en"
 href="https://example.com/en/contact"; />
         <xhtml:link rel="alternate" hreflang="es"
 href="https://example.com/es/contact"; />
         <xhtml:link rel="alternate" hreflang="el"
 href="https://example.com/el/contact"; />
     </url>
 </urlset>
 }}}

 I propose to verify if the alternates is True and generate the items only
 for the default language:

 {{{
     def _items(self):
         if self.i18n:
             if self.alternates:
                 lang_code = self.default_lang or settings.LANGUAGE_CODE
                 items = self.items()
                 items = [
                     # The url will be generated based on the default
 language the translations links will be added in the alternate links
                     (item, lang_code)
                     for item in items
                 ]
                 return items
             # Create (item, lang_code) tuples for all items and languages.
             # This is necessary to paginate with all languages already
 considered.
             items = [
                 (item, lang_code)
                 for lang_code in self._languages()
                 for item in self.items()
             ]
             return items
         return self.items()
 }}}

 Then i expected a result more like:
 {{{
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";
 xmlns:xhtml="http://www.w3.org/1999/xhtml";>
     <url>
         <loc>https://example.com/en/contact</loc>
         <changefreq>weekly</changefreq>
         <priority>0.5</priority>
         <xhtml:link rel="alternate" hreflang="en"
 href="https://example.com/en/contact"; />
         <xhtml:link rel="alternate" hreflang="es"
 href="https://example.com/es/contact"; />
         <xhtml:link rel="alternate" hreflang="el"
 href="https://example.com/el/contact"; />
     </url>
 </urlset>
 }}}

 This makes sense? can I start work on it?

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33998#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/010701831eb156bc-c9533ca9-3a5d-466f-8d0c-a667da447d2b-000000%40eu-central-1.amazonses.com.

Reply via email to