Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Wenn Artikel gelöscht - keine 404 Umleitung sondern Startseite

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Hallo,

    erstmal die Kurzfassung meiner Frage:

    Wenn ich einen Artikel in meinem Shop öffne der gelöscht wurde oder nicht existiert, dann leitet mein Shop auf die Startseite um, nicht auf die 404 Seite.

    Habt ihr vielleicht noch eine Lösung, wo ich nachschauen kann - das wenn ein Artikel nicht mehr vorhanden ist oder eben eine falsche / nicht vorhandene Artikel ID aufgerufen wird - der Shop dann auf 404 Umleitet statt zu Startseite?

    Hier die lange Fassung. Entschuldigung vorab wenn es zu viel ist, aber wenn ihr euch schon die Mühe macht mir zu helfen, da dachte ich mir das ich im gegenzug soviel Input wie Möglich zur Verfügung stelle.

    Google hat mich heute per E-Mail auf folgendes aufmerksam gemacht:

    "Der Googlebot hat eine erhebliche Zunahme der Anzahl der URLs von
    http://www.unserShop.tld/ festgestellt, die den Fehler "404 (nicht
    gefunden)" zurückgeben sollten, es aber momentan nicht tun."

    Ich habe mir das dann angeschaut und folgendes Festgestellt:

    Rufe ich einen Artikel wie folgt auf:

    http://www.unserShop.tld/HauptKategorie/UnterKategorie/ArtikelBeschreibung--95277.html

    dann lande ich auf der Startseite des Shops.

    Der Artikel existiert nicht mehr. Er wurde vor Wochen gelöscht.

    Rufe ich zu Testzwecken die Seite wie folgt auf:

    http://www.unserShop.tld/HauptKategorie/UnterKategorie/ArtikelBeschreibung--95277.htm

    also .htm statt .html - so leitet er auf die 404 Seite.

    Das gilt auch für alles andere an Datei Endungen wie .php ect.
    Diese werden zu 404 Umgeleitet.

    Erst dachte ich, es läge an der html Endung.

    Wenn ich aber den Artikel ohne die Artikel ID am Ende aufrufe:

    http://www.unserShop.tld/HauptKategorie/UnterKategorie/ArtikelBeschreibung.html

    dann lande ich auch auf der 404 Seite.

    Ich fragte mich ob dies nur bei gelöschten Artikel so ist.
    Also habe ich eine fiktive Artikel ID angegeben, aber auch dann kommt die Umleitung zur Startseite:

    http://www.unserShop.tld/HauptKategorie/UnterKategorie/ArtikelBeschreibung--000000.html

    Ich hatte dann meine .htaccess in Vermutung.

    Hier der Inhalt:

    Code: PHP  [Auswählen]
    # Scripte Laufzeit
    php_value upload_max_filesize 20M
    php_value post_max_size 20M
    php_value max_execution_time 5000
    php_value max_input_time 2000
    php_value memory_limit 256M

    # phpschutz
    AddHandler php54-cgi .php

    # Error.log

    php_flag log_errors on
    php_value error_log "/www/htdocs/****/*****/error/errorlog.txt"

    # Ländersperre

    <IfModule mod_geoip.c>
       GeoIPEnable On
          SetEnvIf GEOIP_COUNTRY_CODE (CN) BlockCountry
          Deny from env=BlockCountry
    </IfModule>

    #====================================================================================================
    # Badbots blockieren [Letzte Aktualisierung: 16.08.2015]
    #====================================================================================================
    RewriteCond %{HTTP_USER_AGENT} MJ12bot/v1.4.5                                                    [OR]
    RewriteCond %{HTTP_USER_AGENT} Majestic-SEO                                                      [OR]
    RewriteCond %{HTTP_USER_AGENT} MJ12bot                                                           [OR]
    RewriteCond %{HTTP_USER_AGENT} SEOkicks-Robot                                                         [OR]
    RewriteCond %{HTTP_USER_AGENT} c7.seokicks.de                                                         [OR]
    RewriteCond %{HTTP_USER_AGENT} TwengaBot-2.0                                                          [OR]
    RewriteCond %{HTTP_USER_AGENT} Cliqzbot/0.1                                                      [OR]
    RewriteCond %{HTTP_USER_AGENT} Cliqzbot                                                          [OR]
    RewriteCond %{HTTP_USER_AGENT} updown_tester                                                     [OR]
    RewriteCond %{HTTP_USER_AGENT} SISTRIX
    RewriteRule ^ - [F,L]


    <Limit GET POST HEAD>
    order allow,deny

    deny from 117.136

    allow from all
    </Limit>

    ##-- $Id: .htaccess 3209 2012-07-12 11:51:11Z gtb-modified $

    ##-- Default charset
    #AddDefaultCharset UTF-8
    AddDefaultCharset ISO-8859-15

    ##-- Disable the server signature
    ServerSignature Off

    ##-- Turn off ETags in HTTP-header (use both directives)
    <IfModule mod_headers.c>
      Header unset ETag
    </IfModule>
    FileETag None

    ##-- When caching of gzipped JS and CSS files is used, enable this setting
    #<IfModule mod_headers.c>
    #  Header set Vary Accept-Encoding
    #</IfModule>

    ##-- when using Provider 1&1 set the following lines to activate PHP5
    #AddType x-mapp-php5 .php
    #AddHandler x-mapp-php5 .php

    # Disable directory browsing (disabled by default as this causes problems on some servers)
    #Options All -Indexes

    ##-- Enable the compression for any type of content
    #<IfModule mod_deflate.c>
    #  <FilesMatch "\\.(js|css|html|htm|php|xml|jpg|jpeg|png|gif)$">
    #    SetOutputFilter DEFLATE
    #  </FilesMatch>
    #</IfModule>

    ##-- Customization of HTTP request and response headers
    <IfModule mod_headers.c>
      <FilesMatch "\\.(ico|jpe?g|png|gif|swf|flv)$">
        Header set Cache-Control "max-age=2592000, public"
      </FilesMatch>
      <FilesMatch "\\.(css)$">
        Header set Cache-Control "max-age=604800, public"
      </FilesMatch>
      <FilesMatch "\\.(js)$">
        Header set Cache-Control "max-age=216000, private"
      </FilesMatch>
      <FilesMatch "\\.(xml|txt)$">
        Header set Cache-Control "max-age=216000, public, must-revalidate"
      </FilesMatch>
      <FilesMatch "\\.(html|htm|php)$">
        Header set Cache-Control "max-age=1, private, must-revalidate"
      </FilesMatch>
    </IfModule>

    ##-- Generation of Expires and Cache-Control HTTP headers
    <IfModule mod_expires.c>
      ExpiresActive On
      ExpiresDefault "access plus 1 seconds"
      ExpiresByType image/gif "access plus 2592000 seconds"
      ExpiresByType image/jpeg "access plus 2592000 seconds"
      ExpiresByType image/png "access plus 2592000 seconds"
      ExpiresByType text/html "access plus 1 seconds"
      ExpiresByType text/css "access plus 604800 seconds"
      ExpiresByType text/javascript "access plus 216000 seconds"
      ExpiresByType application/x-javascript "access plus 216000 seconds"
    </IfModule>

    ##-- Configure php_flags if necessary
    ##-- BEGIN - use IfModule clause if PHP runs in CGI mode, otherwise just uncomment the lines with php_flag...
    #<IfModule mod_php.c>

      ##-- Warn when arguments are passed by reference at function call time (from PHP5 allow_call_time_pass_reference is deprecated)
     #php_flag allow_call_time_pass_reference on

      ##-- Disable transparent sid support PHP-default is off (XTC Session only on first visit)
     #php_flag session.use_trans_sid off

      ##-- set suhosin flags because of errors with attributes (for webhosters with suhosin hardening patch enabled)
     #php_value suhosin.post.max_array_depth 0
     #php_value suhosin.post.max_array_index_length 0
     #php_value suhosin.post.max_vars 0
     #php_value suhosin.request.max_array_depth 0
     #php_value suhosin.request.max_array_index_length 0
     #php_value suhosin.request.max_vars 0

      ##-- set suhosin flags to have unencrypted session data, affecting "whos_online" & "shopping cart" (for webhosters with suhosin hardening patch enabled)patch enabled
     #php_value suhosin.session.encrypt Off
     #php_value suhosin.session.cryptkey ''

    ##-- END - use IfModule clause if PHP runs in CGI mode, otherwise just uncomment the lines with php_flag...
    #</IfModule>

    ##-- Redirect error pages to Sitemap
    ##-- set the correct Path to ErrorDocument
    ErrorDocument 400 /?error=400
    ErrorDocument 401 /?error=401
    ErrorDocument 402 /?error=402
    ErrorDocument 403 /?error=403
    ErrorDocument 404 /404.html
    ErrorDocument 500 /?error=500

    <FilesMatch "\.(gif|jpe?g|png)$">
      ErrorDocument 404 /404.jpg
    </FilesMatch>


    ##-----------------------------------------
    ##- SEO Shopstat Modul (Hartmut Koenig)
    ##-----------------------------------------
    <IfModule mod_rewrite.c>
      ##-- Initialize and enable rewrite engine
     ##-- Documentation http://httpd.apache.org/docs/misc/rewriteguide.html
     RewriteEngine On

      ##-- EXAMPLE: If your shop is located at "http://www.yourdomain.com/shop",
     ##-- set the following line like e.g.: RewriteBase /shop/
     RewriteBase /

      ##-- Use canonical URLs
     ##-- redirect to www-domain, when www is missing and no subdomain given and not using an ssl-proxy
     ##-- HostEurope
     #RewriteCond %{HTTP:X-Forwarded-Server}   !^ssl\.webpack\.de$ [NC]
     ##-- 1und1
     #RewriteCond %{HTTP:X-Forwarded-Server}   !^ssl\.kundenserver\.de$ [NC]
     ##-- domainFACTORY
     #RewriteCond %{HTTP:X-Forwarded-Server}   !^sslsites\.de$ [NC]
     ##-- All-Inkl
     #RewriteCond %{HTTP:X-Forwarded-Server}   !^ssl-account\.com$ [NC]
     ##-- Strato
     #RewriteCond %{HTTP:X-Forwarded-Server}   !^www\.ssl-id\.de$ [NC]

      #RewriteCond %{HTTP_HOST}                 !^www\.(.*) [NC]
     #RewriteCond %{HTTP_HOST}                 !^(.*)\.(.*)\.(.*) [NC]
     #RewriteCond %{HTTP_HOST}                 !^localhost(.*)$ [NC]
     #RewriteRule ^(.*)                        http://www.%{HTTP_HOST}/$1 [R=301,L]

      ##-- Sitemap
     RewriteRule ^sitemap(.*)\.html$ shop_content.php?coID=8 [QSA,L]

      ##----------------------------------------------------------------------------------
     ##-- When working with SEO-Urls you can decide, whether to use a colon ":" or a dash "-" symbol
     ##-- (Windows Servers might have problems with colon as delimiter!)
     ##-- Change the delimiter symbol also in file "/inc/shopstat_functions.inc.php"
     ##----------------------------------------------------------------------------------

      ##-- Use colon delimiter ":" for SEO-URLS (default setting)
     ##-- Categories (:::)
     #RewriteCond %{REQUEST_URI} (.*):::([_0-9]+):([_0-9]+)\.html$
     #RewriteRule (.*):::([_0-9]+):([_0-9]+)\.html$ index.php?cPath=$2&page=$3 [QSA,L]
     #RewriteCond %{REQUEST_URI} (.*):::([_0-9]+)\.html$
     #RewriteRule (.*):::([_0-9]+)\.html$ index.php?cPath=$2 [QSA,L]

      ##-- Products (::)
     #RewriteRule (.*)::(.+)\.html$ product_info.php?products_id=$2 [QSA,L]

      ##-- Content (:_:)
     #RewriteRule (.*):_:([0-9]+)\.html$ shop_content.php?coID=$2 [QSA,L]

      ##-- Manufacturers (:.:)
     #RewriteCond %{REQUEST_URI} (.*):.:([_0-9]+):([_0-9]+)\.html$
     #RewriteRule (.*):.:([_0-9]+):([_0-9]+)\.html$ index.php?manufacturers_id=$2&page=$3 [QSA,L]
     #RewriteCond %{REQUEST_URI} (.*):.:([_0-9]+)\.html$
     #RewriteRule (.*):.:([0-9]+)\.html$ index.php?manufacturers_id=$2 [QSA,L]

      ##-- Use dash delimiter "-" for SEO-URLS
     ##-- Categories (---)
     RewriteCond %{REQUEST_URI} (.*)---([_0-9]+)-([_0-9]+)\.html$
      RewriteRule (.*)---([_0-9]+)-([_0-9]+)\.html$ index.php?cPath=$2&page=$3 [QSA,L]
      RewriteCond %{REQUEST_URI} (.*)---([_0-9]+)\.html$
      RewriteRule (.*)---([_0-9]+)\.html$ index.php?cPath=$2 [QSA,L]

      ##-- Products (--)
     RewriteRule (.*)--(.+)\.html$ product_info.php?products_id=$2 [QSA,L]
      ##--   RewriteRule (.*)--(.+)\.html$ print_product_info.php [QSA,L]
    RewriteRule ^print_product_info.php - [R=404,L]
     
    ##-- Content (-_-)
     RewriteRule (.*)-_-([0-9]+)\.html$ shop_content.php?coID=$2 [QSA,L]

      ##-- Manufacturers (-.-)
     RewriteCond %{REQUEST_URI} (.*)-.-([_0-9]+)-([_0-9]+)\.html$
      RewriteRule (.*)-.-([_0-9]+)-([_0-9]+)\.html$ index.php?manufacturers_id=$2&page=$3 [QSA,L]
      RewriteCond %{REQUEST_URI} (.*)-.-([_0-9]+)\.html$
      RewriteRule (.*)-.-([0-9]+)\.html$ index.php?manufacturers_id=$2 [QSA,L]
    </IfModule>

    Zu Testzwecken habe ich mir dann einen "nackten" Shop installiert und dort die .htaccess rauskopiert und in meinem Shop eingefügt. Gleicher Fehler.

    Gelöschte Artikel = Startseite

    Meine .htaccess habe ich dann in den nackten Shop kopiert.
    Dort den gleichen Test gemacht. Es funktiert. Gelöschter Artikel aufgerufen = 404 Seite.

    Ich habe keine Lösung mehr woran es liegen könnte. Ich mag nicht ausschließen das ich das evtl. mal so eingestellt habe, aber in meinen Changelogs konnte ich nichts finden.

    Habt ihr vielleicht noch eine Lösung, wo ich nachschauen kann - das wenn ein Artikel nicht mehr vorhanden ist oder eben eine falsche / nicht vorhandene Artikel ID aufgerufen wird - der Shop dann auf 404 Umleitet statt zu Startseite?

    Ganz vielen lieben Dank vorab für die Antwort und Hilfe.

    Mit freundlichen Grüßen

    Heiko

    Linkback: https://www.modified-shop.org/forum/index.php?topic=34188.0

    JPW

    • Mitglied
    • Beiträge: 167
    • Geschlecht:
    Hallo Heiko!

    Ich kann dir zwar bei dem eigentlichen Problem nicht wirklich helfen, jedoch solltest du genau bedenken, welcher Error-Code gesetzt werden soll. 404 sollte man für Seiten verwenden, die vorübergehend nicht erreichbar oder verschoben worden sind. Wenn du Artikel endgültig auslistest, solltest du 410 (Gone) verwenden. Damit erreichst du, das Google die Seite aus dem Index und Archiv entfernt - irgendwann.
    In der .htaccess müsstest du nach
    Code: PHP  [Auswählen]
    ErrorDocument 404 /404.html

    folgendes einfügen:
    Code: PHP  [Auswählen]
    ErrorDocument 410 /410.html

    # und folgenden Code, auf deinen Shop angepasst:

    # Als Beispiel für einen Ordnerpfad, der nicht mehr existiert:
    Redirect Gone /unterordner/

    # Als Beispiel für eine nicht mehr existierende Datei in einem Unterordner:
    Redirect Gone /unterordner/dokument.htm

    # Zuletzt noch ein Beispiel für eine Datei im Root-Verzeichnis:
    Redirect Gone /dokument.htm
     

    Wenn es viele Artikel sind, ist es eine ziemliche Fleißarbeit, alle Pfade in die .htaccess einzutragen. Aber du wertest deinen Shop bei Google wieder auf.
    Für den Besucher solltest du auch tatsächlich eine 404.html und eine 410.html ins Root-Verzeichnis legen.

    Viele Grüße
    Jens

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Danke dir für deine Antwort.

    Ich gebe dir in dem Punkt recht, aber das ist leider für mich kaum umsetzbar.

    Da müsste ich über 10.000 Artikel aus den letzten 7 Jahren per Hand dort eintragen.

    Ich habe mal "Redirect Gone /Kategorie/" eingepflegt, aber danach war kein Artikel mehr in der Kategorie erreichbar :)

    Am Wochenende habe ich noch mal viele Stunden versucht den Fehler zu finden, aber irgendwo übersehe ich etwas.

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Manchmal muss man einfach mal eine Pause machen.

    Im heutigen Anlauf habe ich den Fehler gefunden.

    Ich bin dieser Lösung gefolgt: http://www.modified-shop.org/forum/index.php?topic=19290.msg180925#msg180925

    Die Einträge waren zwar vorhanden, aber ausgeklammert.
    Nach dem ich sie aktiviert habe, wird auch wieder die 404 angezeigt.