v4.3.x Duplikat – Google hat eine andere Seite als der Nutzer als kanonische Seite bestimmt

Thema wurde von PHI, 18. März 2021 erstellt.

  1. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Lass das canonical Tag da aussehen wie es will, das liest niemand. Der HTTP Status ist 404, damit ist die Geschichte da nach allen normalen Regeln zuende. Hab ich gecheckt, der Status ist korrekt 404.
     
  2. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Das ist ein regulärer Ausdruck. Da das nicht extra als "beginnt mit" gekennzeichnet ist reicht ein vorkommen irgendwo um zu matchen.

    Der Ländercode ist kein Ländercode sondern ein Sprachcode. Ländercodes haben wir nicht in der URL. Der setzt die Sprache.

    Wenn die Regel angewendet wird, gibts keinen Ländercode mehr in den URLs, also kommt die Standardsprache.
     
  3. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Also ich würde mal zeitweise in der

    /system/overloads/HeaderExtenderComponent/SeoTagsHeaderExtender.inc.php mal per preg_replace() alle

    %2525253Flanguage=en
    und
    %2525253Flanguage
    und
    %2525253Dde
    und
    %2525253Flanguage%2525253Den

    rausbasteln. Holzhammer. Oder mal zeitweise ALLE Parameter abschneiden.
     
  4. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    937
    Danke erhalten:
    808
    Danke vergeben:
    301
    Möglich, dass bei den 603 da Fälle bei sind. Aber bei den genannten Beispiel-URLs müsste das passen.

    https://www.phiessences.com/en/Anim...language%3Des%3Flanguage%3Den%3Flanguage%3Dfr

    wird weitergeleitet auf

    https://www.phiessences.com/en/Animal-Essences/European-Animal-Essences/16--Ibex.html

    Sprache ist weiterhin englisch.

    Das hat gar nicht explizit mit dem Parameter zu tun. Die Bedingung greift auch bei z.B. "?blanguage=".
     
  5. PHI

    PHI Erfahrener Benutzer

    Registriert seit:
    23. März 2012
    Beiträge:
    396
    Danke erhalten:
    26
    Danke vergeben:
    134
    #25 PHI, 19. März 2021
    Zuletzt bearbeitet: 19. März 2021
    Ja wundert mich gerade auch. Sehr eigenartig. 404 funktioniert nicht.

    Mit freundlichen Grüßen aus den Niederlanden
     
  6. PHI

    PHI Erfahrener Benutzer

    Registriert seit:
    23. März 2012
    Beiträge:
    396
    Danke erhalten:
    26
    Danke vergeben:
    134
    Guten Morgen,

    wo finde ich nochmal den Button für die Link-Reparatur im Gambio-Admin, das Layout hat sich geändert.
     
  7. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Unter "SEO". Aber das ist jetzt die einzige Antwort auf die ganzen Tipps, Hilfen und Hinweise? Konntest du das Problem lösen? Hat dir die Sache von Dominik geholfen? Oder bist du meinen Weg gegangen?
     
  8. PHI

    PHI Erfahrener Benutzer

    Registriert seit:
    23. März 2012
    Beiträge:
    396
    Danke erhalten:
    26
    Danke vergeben:
    134
    Hallo, vielen Dank für die Rückmeldung. Ich hab das in SEO nicht gefunden ( Urls reparieren )...

    Bezüglich der htacces komm ich nicht weiter, da ich ich mich in dem Bereich nicht so gut auskenne.

    Die auch angesprochene Datei: SeoTagsHeaderExtender.inc.php hab ich mir per SFTP angeschaut, diese komischen URLS sind darin nicht enthalten:

    %2525253Flanguage=en
    und
    %2525253Flanguage
    und
    %2525253Dde
    und
    %2525253Flanguage%2525253Den


    upload_2021-3-22_14-40-20.png


    Inhalt von der: SeoTagsHeaderExtender.inc.php

    <?php
    /* --------------------------------------------------------------
    SeoTagsHeaderExtender.inc.php 2019-08-22
    Gambio GmbH
    http://www.gambio.de
    Copyright (c) 2019 Gambio GmbH
    Released under the GNU General Public License (Version 2)
    [http://www.gnu.org/licenses/gpl-2.0.html]
    --------------------------------------------------------------
    */

    /**
    * Class SeoTagsHeaderExtender
    *
    * Determines output of canonical links, alternate links and prev/next links.
    *
    * Please also refer to SeoTagsDataProvider.
    *
    */
    class SeoTagsHeaderExtender extends SeoTagsHeaderExtender_parent
    {
    /** @var \GMSEOBoost_ORIGIN */
    protected $seoBoost;

    /** @var \LanguageProviderInterface */
    protected $languageProvider;

    /** @var \KeyValueCollection */
    protected $activeCodes;

    /** @var \LanguageCode */
    protected $languageCode;

    /** @var \LanguageCode */
    protected $defaultLangCode;

    /** @var bool */
    protected $indexedPage = true;

    /** @var bool */
    protected $followLinks = true;

    /** @var array */
    protected $excludeGetParams;

    /** @var array */
    protected $noIndexKeys;

    /** @var array */
    protected $noIndexKeysPerPageType;

    /** @var array */
    protected $noFollowKeysPerPageType;

    /** @var array */
    protected $noRelPrevNext;

    /** @var array */
    protected $noCanonicalFiles;

    /** @var array */
    protected $excludeKeysFromCanonical;

    /** @var array */
    protected $excludeKeysFromCanonicalPerPageType;

    public function proceed()
    {
    parent::proceed();

    $this->excludeGetParams = SeoTagsDataProvider::getExcludeGetParams();
    $this->noIndexKeys = SeoTagsDataProvider::getNoIndexKeys();
    $this->noIndexKeysPerPageType = SeoTagsDataProvider::getNoIndexKeysPerPageType();
    $this->noFollowKeysPerPageType = SeoTagsDataProvider::getNoFollowKeysPerPageType();
    $this->noRelPrevNext = SeoTagsDataProvider::getNoRelPrevNext();
    $this->noCanonicalFiles = SeoTagsDataProvider::getNoCanonicalFiles();
    $this->excludeKeysFromCanonical = SeoTagsDataProvider::getExcludeKeysFromCanonical();
    $this->excludeKeysFromCanonicalPerPageType = SeoTagsDataProvider::getExcludeKeysFromCanonicalPerPageType();

    $db = StaticGXCoreLoader::getDatabaseQueryBuilder();
    /** @var \GMSEOBoost_ORIGIN $seoBoost */
    $this->seoBoost = MainFactory::create_object('GMSEOBoost', [], true);
    $this->languageCode = new LanguageCode(new StringType(strtoupper($_SESSION['language_code'])));
    $this->languageProvider = MainFactory::create('LanguageProvider',
    StaticGXCoreLoader::getDatabaseQueryBuilder());
    $this->activeCodes = $this->languageProvider->getActiveCodes();
    $this->defaultLangCode = $this->languageProvider->getDefaultLanguageCode();

    $allowedGetKeys = array_diff(array_keys($_GET), $this->excludeGetParams);

    $this->indexedPage = count(array_intersect($this->noIndexKeys, $allowedGetKeys)) === 0;

    $isProductPage = isset($GLOBALS['product']) && $GLOBALS['product']->isProduct === true;
    $isCategoryPage = isset($_GET['cat'], $GLOBALS['current_category_id'])
    && !empty($GLOBALS['current_category_id']);
    $isContentPage = (!empty($_GET['coID'])
    && strpos($GLOBALS['PHP_SELF'], '/shop_content.php') !== false);
    $isIndexPage = stripos(gm_get_env_info('PHP_SELF'), 'index.php') !== false;
    $useBoostedLanguageCode = gm_get_conf('USE_SEO_BOOST_LANGUAGE_CODE') === 'true';

    $devMode = file_exists(DIR_FS_CATALOG . '/.dev-environment');
    if($devMode)
    {
    header('X-SeoTags-Debug: ' . sprintf('product %s cat %s content %s index %s boosted %s',
    var_export($isProductPage, true), var_export($isCategoryPage, true),
    var_export($isContentPage, true), var_export($isIndexPage, true),
    var_export($useBoostedLanguageCode, true)));
    header('X-SeoTags-GetArray: ' . implode(',', $allowedGetKeys));
    header('X-SeoTags-Get: ' . http_build_query($_GET));
    }
    if($isProductPage)
    {
    $pageHtml = $this->getProductPageHtml();
    $this->indexedPage = $this->indexedPage &&
    count(array_intersect(array_keys($_GET), $this->noIndexKeysPerPageType['product'])) === 0;
    $this->followLinks = $this->followLinks &&
    count(array_intersect(array_keys($_GET), $this->noFollowKeysPerPageType['product'])) === 0;
    }
    elseif($isCategoryPage)
    {
    $pageHtml = $this->getCategoryPageHtml();
    $this->indexedPage = $this->indexedPage &&
    count(array_intersect(array_keys($_GET), $this->noIndexKeysPerPageType['category'])) === 0;
    $this->followLinks = $this->followLinks &&
    count(array_intersect(array_keys($_GET), $this->noFollowKeysPerPageType['category'])) === 0;
    }
    elseif($isContentPage)
    {
    $pageHtml = $this->getContentPageHtml();
    $robotsRow = $db->select('gm_robots_entry')
    ->get_where('content_manager',
    ['content_group' => (int)$_GET['coID'],
    'languages_id' => (int)$_SESSION['languages_id']]
    )->row_array();
    if((int)$robotsRow['gm_robots_entry'] === 1)
    {
    $this->indexedPage = false;
    }
    $this->indexedPage = $this->indexedPage &&
    count(array_intersect(array_keys($_GET), $this->noIndexKeysPerPageType['content'])) === 0;
    $this->followLinks = $this->followLinks &&
    count(array_intersect(array_keys($_GET), $this->noFollowKeysPerPageType['content'])) === 0;
    }
    elseif($isIndexPage)
    {
    $pageHtml = $this->getIndexPageHtml();
    $this->indexedPage = $this->indexedPage &&
    count(array_intersect(array_keys($_GET), $this->noIndexKeysPerPageType['index'])) === 0;
    $this->followLinks = $this->followLinks &&
    count(array_intersect(array_keys($_GET), $this->noFollowKeysPerPageType['index'])) === 0;
    }
    elseif($useBoostedLanguageCode)
    {
    $pageHtml = $this->getBoostedLanguageCodeHtml();
    $this->indexedPage = $this->indexedPage &&
    count(array_intersect(array_keys($_GET), $this->noIndexKeysPerPageType['boosted'])) === 0;
    $this->followLinks = $this->followLinks &&
    count(array_intersect(array_keys($_GET), $this->noFollowKeysPerPageType['boosted'])) === 0;
    }
    else
    {
    $pageHtml = $this->getOtherHtml();
    $this->indexedPage = $this->indexedPage &&
    count(array_intersect(array_keys($_GET), $this->noIndexKeysPerPageType['other'])) === 0;
    $this->followLinks = $this->followLinks &&
    count(array_intersect(array_keys($_GET), $this->noFollowKeysPerPageType['other'])) === 0;
    }

    if($this->indexedPage === true)
    {
    $noIndexFiles = SeoTagsDataProvider::getNoIndexFiles();
    foreach($noIndexFiles as $noIndexFile)
    {
    if(strpos($_SERVER['REQUEST_URI'], $noIndexFile) !== false)
    {
    $this->indexedPage = false;
    break;
    }
    }
     
  9. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Oh, da hat sich wohl alles geändert. Bei mir siehts noch so aus:
     

    Anhänge:

  10. PHI

    PHI Erfahrener Benutzer

    Registriert seit:
    23. März 2012
    Beiträge:
    396
    Danke erhalten:
    26
    Danke vergeben:
    134
    ich find den Button auch nicht mehr

    Mit freundlichen Grüßen aus den Niederlanden
     
  11. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Ja, das sehe ich als Problem. Aber das sind ja die Parameter die im Index sind und die es jetzt erstmal als Notlösung aus der canonical URL rausgeworden werden müssen, oder? Damit der Bot jetzt nicht bei jedem Besuch noch darin bestärkt wird, dass er genau die richtige URL aufruft?

    Also @PHI ich bin kein Experte, aber was ich jetzt probieren würde, (ohne Garantie):

    In der GXMainComponents\Shared\SeoTagsDataProvider.inc.php dies hier suchen:

    Code:
        public static function getExcludeGetParams()
        {
            return [
                'cat',
                'coID',
                'cPath',
                'gm_boosted_category',
                'gm_boosted_content',
                'gm_boosted_product',
                'info',
                'language',
                'products_id',
                'products_qty',
                'ycr',
                'yc'
            ];
        }

    und hierdurch ersetzen:


    Code:
        public static function getExcludeGetParams()
        {
            return [
                'cat',
                'coID',
                'cPath',
                'gm_boosted_category',
                'gm_boosted_content',
                'gm_boosted_product',
                'info',
                'language',
                'products_id',
                'products_qty',
                'ycr',
    '%253Flanguage',
                'yc'
            ];
        }
    Dann mal alle Caches leeren und schauen, wie die canonical URL bei Aufruf dieser Seite hier aussieht:
    (Link nur für registrierte Nutzer sichtbar.)

    Wenn daraus dann (Link nur für registrierte Nutzer sichtbar.) geworden ist, ist schon viel gewonnen, denke ich.

    Vor dem Ausprobieren bitte die Datei sichern und bei Problemen die Sicherung wieder einspielen.

    Wenn du es ausprobiert hast, sag mal Bescheid, dann schaue ich auch nochmal in den Quelltext...

    Aber ansonsten kann bestimmt Dominik Späte dir auch gegen Bezahlung einen Fix machen, vermute ich.
     
  12. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    937
    Danke erhalten:
    808
    Danke vergeben:
    301
    Ja, das wäre m.E. effektiv. Wäre mir aber zu kompliziert. Deshalb würde ich den einfachen Ansatz der 301er-Weiterleitung vorziehen.

    Nein, kein Interesse. Aber danke ;)
     
  13. PHI

    PHI Erfahrener Benutzer

    Registriert seit:
    23. März 2012
    Beiträge:
    396
    Danke erhalten:
    26
    Danke vergeben:
    134
    Hallo, vielen Dank, hab die Zeile '%253Flanguage', hinzugefügt und all Caches gelöscht. Der Canonical ist immer noch falsch.
     
  14. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Probier mal, ob '?language' was bringt.
    (Ist etwas geraten, ich bin gerade nicht ganz sicher, wie dieser kaputte URL in PHP ankommt.)
     
  15. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Dann vielleicht mal dies hier ersetzen?

    Code:
        public static function getExcludeKeysFromCanonical()
        {
            return [
                'page',
            ];
        }
    mit

    Code:
        public static function getExcludeKeysFromCanonical()
        {
            return [
                'page',
                 '%253Flanguage',
                 'language',
                '?language',
            ];
        }
    
     
  16. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
  17. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Doch, den SeoTagsDataProvider müsste man überladen können.
     
  18. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    @PHI noch ein gut gemeinter Hinweis Off Topic: In Deutschland musst du für Flüssigkeiten einen Grundpreis (z.B. pro 100 ml oder pro l o.ä.) angeben. Das kann man für jeden Artikel einzeln im Admin bei den Grundpreisen machen.
    Und man muss auf die EU-Streitschlichtungsplattform verlinken, z.B. vom Impressum aus:
    (Link nur für registrierte Nutzer sichtbar.)

    Und bei der MwSt geht bei dir was gar nicht. Wenn ich was in den Warenkorb lege und Deutschland als LIeferland auswähle, wird 9 % MwSt und zusätzlich nochmal 21 % MwSt ausgewiesen. Da scheint was bei deinen Länder- und Steuereinstellungen auch was ganz kaputt zu sein. Ich würde dafür mal ein Ticket bei Gambio einreichen.
     
  19. PHI

    PHI Erfahrener Benutzer

    Registriert seit:
    23. März 2012
    Beiträge:
    396
    Danke erhalten:
    26
    Danke vergeben:
    134
    Hallo zusammen, hat bisher nicht funktioniert. Der Canonical bleibt falsch.
     
  20. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    beides nicht? Alle caches geleert?