We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 40748
    • 55 Posts
    Hello everybody!

    I'm developing multilanguage catalog and plan to use URLS like that:
    http://www.example.com/page.html?l=eng AND http://www.example.com/page.html?l=est AND http://www.example.com/page.html?l=rus to point to the same page but in different language.

    Technically I don't want to use contexts or folders and I'd like to fetch different language strings from proper TV's of the resource based on URL parameter (to use $url = $modx->makeUrl($id, '', array('l' => 'eng');).

    Can anyone advise me please if this way good or bad from SEO point of view?
    Will be these links indexed by search engines well or search engines will see only one "enter point" http://www.example.com/page.html (the part of the URL before '?' delimeter)?

    Thank you!

    This question has been answered by treigh. See the first response.

    [ed. note: mixa_ru last edited this post 11 years, 7 months ago.]
      Cheap and ready landing pages: http://real-portal.biz
      Start selling fast, good for dropshipping
    • discuss.answer
      • 30585
      • 833 Posts
      From an SEO perspective, using URL parameters to structure a multilingual site is usually not recommended, mostly because it makes it very hard to properly segment your audience based on URL. There's an excellent article by Search Engine Land on this very subject: http://searchengineland.com/the-ultimate-guide-to-multilingual-and-multiregional-seo-157838

      Google recommends a subdirectory structure or a subdomain. More on this here: http://googlewebmastercentral.blogspot.ca/2008/08/how-to-start-multilingual-site.html

      If SEO is very important for your site, you'll be better off following Google's advice. With a subdirectory structure, you can still use a TV value to target your alternative languages.

      One other consideration to keep in mind when dealing with multilingual sites is URL canonicalization and Hreflang. What's your default/preferred language? When users first go to http://www.example.com, which language are they exposed to? You might want to specify your preferred target language useing rel="canonical" and rel="alternate" hreflang="x".

      For further reading on canonical links:

      Matt Cutts : https://www.mattcutts.com/blog/seo-advice-url-canonicalization/
      Search Engine Watch: http://searchenginewatch.com/sew/how-to/2137882/newest-international-seo-challenge-hreflang-canonical-tags#
        A MODx Fanatic
        • 46886
        • 1,154 Posts
        Yeah multi-lingual sites need to decide their structure. You can go one way or another but there is no middle ground.
          • 40748
          • 55 Posts
          @treigh : thanks for detailed explanation!

          By the way, how may I get a friendly URL from my language TV automatically?
          Can you please give me idea?
            Cheap and ready landing pages: http://real-portal.biz
            Start selling fast, good for dropshipping
            • 13428 ☆ A M B ☆
            • 1,031 Posts
            @treigh: Just a question. Is the approach of Babel with different base tags for each language good enough from a SEO point of view? Or would it better to create links with the cultureKey inside? Or is there no difference?

            Babel approach:
            <base href="my.domain/en/">
            ...
            <a href="resource/alias.html">...</a>
            


            cultureKey in Link:
            <base href="my.domain/">
            ...
            <a href="en/resource/alias.html">...</a>
            
              • 30585
              • 833 Posts
              I personally prefer the subdirectory structure, because it looks so much cleaner and also because the subdirectory inherits the authority of the main domain. Even though MODX makes it incredibly easy to "virtually" create Subdomains from a Folder using Virtual Hosts, subdomains are still unique in that they're treated as separate sites by search engines and they don't automatically earn the reputation associated with the main domain (Which could be a good thing in some cases). Plus, I hate having to play with DNS settings (CNAMES and stuff), unless I absolutely have to. Like Matt Cutts, I too believe that subdomains are better used when separating content that's very different in nature. For example: http://support.mycar.com/en/ and http://models.mycar.com/ru/ Notice how we're separating content while conveniently serving languages based on user preferences? The following would be very confusing to users (robots and humans), wouldn't it? http://www.mycar.com/support/ru/.

              @Jako, I've never used Babel (I tried, but I was too lazy to commit), but I've learned (painfully) that absolute URLs are safer. While both approaches will work just fine for the end user, neither offers any SEO benefits to your internal links more than the other. I'd argue that both can be problematic. IMO absolute URLs are better for SEO:
              // Creates absolute URLs by appending the site url to the relative link:
              <a href="[[++site_url]]en/resource/alias.html">my link</a>
              // Creates absolute URLs  using the full scheme property:
              <a href="[[~10? &scheme=`full`]]">my link</a>
              


              When SEO is crucial for a site, I tend to use the <base> tag only for static elements (images,style sheets, etc.).

              On many sites that I manage, I usually put the blog in a subdirectory like this: htttp://www.example.com/blog/. As noted earlier, I've found out the hard way that relying on the <base> tag for deep linking can be costly as far as SEO is concerned. Apparently, even when the base URL is specified, Googlebot isn't clever enough (or pretends not to be) to figure out that this link:

              <a href="blog/an-awesome-post.html">An awesome post</a>
              is the same as this:

              <a href="http://www.example.com/blog/an-awesome-post.html">An awesome post</a>
              Unless I'm using absolute URLs for subdirectory pages, I usually get strange 404 error messages in Google Webmasters Tools. This one for example: http://www.example.com/blog/blog/an-awesome-post.html

              Why Google appends "blog/" to "blog/" isn't clear to me, but I bet it's due to relative URLs. But it makes sense, doesn't it? While my site's root directory is local to my web server, it is not to Google's. The <base> tag trick only works when the traffic is local, because my local web server knows where to find my site's root directory. The foreign one doesn't (necessarily). This issue will most likely hunt you in your multilingual site if using the subdirectory structure (and the subdomain structure with relative links)

              @mixa_ru, I'm not sure how you're using the language TV to link those multilingual pages, but suppose you had the following setup:

              en/ (English is assumed to be the default language)
              --Services (2)
              --About (3)

              ru/
              --Services (5)
              --About (6)

              est/
              --Services (8)
              --About (9)

              You could then create three language TVs: EN, RU, EST that you'd attach to the appropriate templates. For example, EN and RU would be attached to the Estonian templates and so on.

              On the est/services.html resource for example, you could specify the id of the alternate language pages in the appropriate TV: 2 in the EN TV and 5 in the RU TV. This should work just fine for a smaller website. A more efficient solution such as Babel, migxmultilang might be better for a bigger site.

              I hope this helps.
                A MODx Fanatic
                • 40748
                • 55 Posts
                @treigh: thank you again for assistance!

                I have a three-language catalog and I decided to have one resource for each of catalog item.
                Also I attach two TV for different language and I use base resource fields for default language.

                Now I'm struggling with switching of languages depends on user choise.
                I try to send language parameters in URL via link (
                <a href="[[~[[*id]]? &lang=`eng`]]">Item 1</a>
                ) and catch it in the resource and then take proper TV value or resource field.

                For this moment I'm doing it with no FURLs and URL looks like this:

                http://website.com/yakuza/index.php?id=5&lang=rus
                http://website.com/yakuza/index.php?id=5&lang=eng
                http://website.com/yakuza/index.php?id=5


                for each language.

                If that works I turn on FURLs and see if everything ok (but I'm not sure about main page of website).
                  Cheap and ready landing pages: http://real-portal.biz
                  Start selling fast, good for dropshipping
                  • 36416
                  • 589 Posts
                  Quote from: treigh at Feb 09, 2015, 05:34 AM
                  (...)
                  When SEO is crucial for a site, I tend to use the <base> tag only for static elements (images,style sheets, etc.).
                  (...)

                  Every perceived difference you wrote about disappears if you use canonical URLs in <head>.
                    • 30585
                    • 833 Posts
                    @mixa_ru,

                    You shouldn't really have any problems using your current setup with Friendly URLs and Friendly Alias Path turned on.

                    This should still work:
                    http://website.com/yakuza/item.html?lang=rus


                    What snippet are you using to get the language parameter? How are you producing the translation; do you have 3 separate language pages for each item?
                      A MODx Fanatic
                      • 40748
                      • 55 Posts
                      @treigh,

                      I'm not sure my way will work with "site start" page because now I have this scheme of URL's:

                      http://website.com/yakuza/index.php?id=5&lang=rus
                      http://website.com/yakuza/index.php?id=5&lang=eng
                      http://website.com/yakuza/index.php?id=5


                      And when it is the first page with FURL is on ,URL will be http://website.com/yakuza/?&lang=rus.
                      Without index.php part by default.
                      In this case I can't get it in $_GET array.
                      I do not test in with FURL yet.

                      I have one resource for each item. Inside the resource I have two TV for russian and for english language, it's for item's name in different languages. For default estonian language I use regular pagetitle, logtitle and content fields of the resource.
                      Then I make links with parameters
                      <a href="[[~[[*id]]? &lang=`eng`]]">Item 1</a>
                      and after I take the params value from $GET array.

                      I use pdoTools set of snippets: http://modx.com/extras/package/pdotools . Its documentation mostly in russian but it's compatible more or less with getResources in snippet call parametewrs.
                        Cheap and ready landing pages: http://real-portal.biz
                        Start selling fast, good for dropshipping