View Issue Details

IDProjectCategoryView StatusLast Update
0001857OXID eShop (all versions)4.08. Cachepublic2012-12-10 13:38
Reportermanuel Assigned To 
PriorityimmediateSeverityblockReproducibilityalways
Status resolvedResolutionfixed 
Summary0001857: GET-Parameter leads to cached NOINDEX-Header for startpage
DescriptionWe have an OXID EE 4 under heavy load with jumping google ranks. We thought that the origin of this was a relaunch for shop earlier and old links but tuesday the shop vanished from the google index completely. A major crash for every page!

Our Analysis:
Enable Dynamic Content Caching in the Backend. Call the uncached start page with an "unknown" GET Parameter like a GET-Parameter of a Google Adwords campaign and oxUbase::_processRequest puts a "NOINDEX, FOLLOW" in the header.

        // non admin, request is not empty and was not processed by seo engine
        if ( $myUtils->seoIsActive() && !isSearchEngineUrl() && ( $sStdUrl = getRequestUrl( '', true ) ) ) {

            // fetching standard url and looking for it in seo table
            if ( $this->_canRedirect() && ( $sRedirectUrl = oxSeoEncoder::getInstance()->fetchSeoUrl( $sStdUrl ) ) ) {
                $myUtils->redirect( $this->getConfig()->getShopURL() . $sRedirectUrl, false );
            } else {
                // forcing to set noindex/follow meta
                $this->_forceNoIndex();


And this "NOINDEX" Header will be cached by the OXID Dynamic Content Caching for your normal SEO startpage URL. If Google fetches this cached state, say goodbye to your actual SERP Position temporarily.

Try:
- Enable Content Caching on http://demoshop.oxid-esales.com/enterprise-edition/ (start is cached per default)
- Call http://demoshop.oxid-esales.com/enterprise-edition/?foo=bar with a fresh cach
- Call http://demoshop.oxid-esales.com/enterprise-edition/ And you got the "NOINDEX".

That means imho that the cached template for the startpage with the unknown GET-Parameter AND the correct call of the correct call is the same, because oxUbase::getViewId can not know every GET-Parameter for returning the ID used for a cached Template. And that there is no easy way writing a module without changing the whole caching mechanism for "repairing" that. We would need a module like Zend_Cache checking every GET-Parameter.

Our workaround: Making an http request in oxCache::reset for the starpage automatically so that we minimize the time to a minimum in which a customer with a "bad" request could create a "bad" cache state destroying search engine ranks temporarily.

Regards
TagsNo tags attached.
Theme
Browser
PHP Version
Database Version

Activities

manuel

2010-05-27 14:11

reporter   ~0003108

Relations:
0001373 - Displaying the head-Tag
0000692 - (Comment 2009-03-16 15:54 from arvydas_vapsva) "Seems like this approach does not work, so we could solve it by adding special "noindex, follow" meta tags instead of emitting 404 header."

arvydas_vapsva

2010-05-27 17:18

reporter   ~0003110

Last edited: 2010-05-27 17:19

Solution for the problem is deep in code ("views/oxubase.php"). As we can't release custom module to fix the problem, you will have to wait until next release or modify file by yourself.

Manual instructions:

open "views/oxubase.php" and search for method "getViewId()", find LAST:

    return $this->_sViewId;

and modify it:

   return $this->_sViewId."|".( (int) $this->_blForceNoIndex );

The problem should be gone!