subject: serverside delievery of appropriate language-sense pageversion worsened searchengine ranking

neue medienordnung plus
  last edited: Fri, 29 Sep 2017 08:42:22 +0200  
FYI: Use of one url for two or more languages with serverside delievery of appropriate language-sense pageversion worsened searchengine ranking. S. also "Make sure each language version is easily discoverable" - https://support.google.com/webmasters/answer/182192?hl=en

Keep the content for each language on separate URLs. Don’t use cookies to show translated versions of the page. Consider cross-linking each language version of a page. That way, a French user who lands on the German version of your page can get to the right language version with a single click.

Avoid automatic redirection based on the user’s perceived language. These redirections could prevent users (and search engines) from viewing all the versions of your site.

@Andrew Manning @Hubzilla Development+ @Hubzilla Support Forum+ #switch #browsersniffing #BrowserDetection #Browserweiche #sniffing #languagesensitive #serverside #seo #search #searchengine #sumo
Andrew
 
dev.hubzilla.org is now at dev branch commit 31d9208.

Here's an example of what changed for the Page module:



diff --git a/Zotlabs/Module/Page.php b/Zotlabs/Module/Page.php
index 6ef285d..7bc90c0 100644
--- a/Zotlabs/Module/Page.php
+++ b/Zotlabs/Module/Page.php
@@ -43,11 +43,31 @@ class Page extends \Zotlabs\Web\Controller {
    
        $channel_address = argv(1);
    
+        // Always look first for the page name prefixed by the observer language; for instance page/nickname/de/foo
+        // followed by page/nickname/foo if that is not found.
+        // If your browser language is de and you want to access the default in this case,
+        // use page/nickname/-/foo to over-ride the language and access only the page with pagelink of 'foo'
+
+        $page_name = '';
+        $ignore_language = false;
+
+        for($x = 2; $x < argc(); $x ++) {
+            if($page_name === '' && argv($x) === '-') {
+                $ignore_language = true;
+                continue;
+            }
+            if($page_name)
+                $page_name .= '/';
+            $page_name .= argv($x);
+        }
+
+
        // The page link title was stored in a urlencoded format
        // php or the browser may/will have decoded it, so re-encode it for our search
    
-        $page_id = urlencode(argv(2));
-    
+        $page_id = urlencode($page_name);
+        $lang_page_id = urlencode(\App::$language . '/' . $page_name);
+
        $u = q("select channel_id from channel where channel_address = '%s' limit 1",
            dbesc($channel_address)
        );
@@ -64,16 +84,31 @@ class Page extends \Zotlabs\Web\Controller {
    
        require_once('include/security.php');
        $sql_options = item_permissions_sql($u[0]['channel_id']);
-    
-        $r = q("select item.* from item left join iconfig on item.id = iconfig.iid
-            where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and item.item_delayed = 0
-            and (( iconfig.k = 'WEBPAGE' and item_type = %d )
-            OR ( iconfig.k = 'PDL' AND item_type = %d )) $sql_options $revision limit 1",
-            intval($u[0]['channel_id']),
-            dbesc($page_id),
-            intval(ITEM_TYPE_WEBPAGE),
-            intval(ITEM_TYPE_PDL)
-        );
+
+        $r = null;    
+
+        if(! $ignore_language) {
+            $r = q("select item.* from item left join iconfig on item.id = iconfig.iid
+                where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and item.item_delayed = 0
+                and (( iconfig.k = 'WEBPAGE' and item_type = %d )
+                OR ( iconfig.k = 'PDL' AND item_type = %d )) $sql_options $revision limit 1",
+                intval($u[0]['channel_id']),
+                dbesc($lang_page_id),
+                intval(ITEM_TYPE_WEBPAGE),
+                intval(ITEM_TYPE_PDL)
+            );
+        }
+        if(! $r) {
+            $r = q("select item.* from item left join iconfig on item.id = iconfig.iid
+                where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and item.item_delayed = 0
+                and (( iconfig.k = 'WEBPAGE' and item_type = %d )
+                OR ( iconfig.k = 'PDL' AND item_type = %d )) $sql_options $revision limit 1",
+                intval($u[0]['channel_id']),
+                dbesc($page_id),
+                intval(ITEM_TYPE_WEBPAGE),
+                intval(ITEM_TYPE_PDL)
+            );
+        }
        if(! $r) {
    
            // Check again with no permissions clause to see if it is a permissions issue
neue medienordnung plus
  last edited: Fri, 26 May 2017 10:04:37 +0200  
@Mike Macgirvin
If you want to translate a webpage 'foo' into German you just create a page called 'de/foo' and translate the page.

I mean, for search friendly, SEO-optimized URL's is it inpossible for all languages same address foo to use. URL-value, keywords in URL's are important for pageranking - s. Therefore is it important, that URL contains keywords, suitably for respective language in each page.
neue medienordnung plus
  
I included the solution "Support for publishing of search engine friendly multilinguage content" in my speech/ presentation Hubzilla - introduction, possibilities, Hubzilla community - in three languages ;-) http://hub2.sprechrun.de/page/hucope/hubzilla_tools_page_en