Typo3 - Site Crawler indiziert nach HTTPS-Umstellung nicht mehr

Wir haben bereits in diesem Artikel über die Typo3-Extension Site Crawler berichtet und gezeigt, wie man alle Typo3-Seiten in den Search Index automatisiert aufnehmen lassen kann. Nach der Umstellung der Seiten von PC-Erfahrung.de von HTTP auf HTTPS funktionierten die altbewährten Skripte nicht mehr. Die URLs wurden zwar erfolgreich in die Queue aufgenommen, aber keine der Seiten wurde in den Index aufgenommen. Die Tabellen wie index_rel, index_fulltext und Co. waren leer. Das Ergebnis: die Typo3-Suche funktioniert nicht.

Die Index-Tabellen der Typo3-Suche bleiben leer
Die Index-Tabellen der Typo3-Suche bleiben leer

Leider ist nicht sofort ersichtlich, was die Fehlerursache ist, so dass etwas tiefer in die Extension hineingeschaut werden musste.

Fehleranalyse

Der Site Crawler führt im wesentlichen zwei Tasks aus:

  1. Alle Seiten in die Warteschlange aufnehmen
    typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf indexall -o queue
  2. Die Seiten aus Warteschlange abarbeiten
    typo3/cli_dispatch.phpsh crawler 1 -d 99 -conf indexall

Punkt 1 funktioniert einwandfrei, aber der Punkt 2 scheiterte. Kurz gesagt: die Seiten wurden in die Queue aufgenommen, aber die Indizierung scheiterte.

Nach einem Blick auf "WEB -> Info -> beliebe Seite -> Site Crawler -> Log" wurde das Problem sichtbar.

301 Weiterleitung im Crawler

Der Crawler versucht weiterhin die alte http:// anstatt der neuen https:// Domain aufzurufen. Anstatt eines 200 HTTP Status Code begrüßt im aber ein 301, was den Crawler dazu veranlasst, die Seite nicht zu indizieren.

Nach etwas Recherche wurde die entsprechende Codestelle in typo3conf/ext/crawler/class.tx_crawler_lib.php gefunden:

       protected function getBaseUrlForConfigurationRecord($baseUrl,$sysDomainUid) {
                $sysDomainUid = intval($sysDomainUid);
                if ($sysDomainUid > 0) {
                        $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                                '*',
                                'sys_domain',
                                'uid = '.$sysDomainUid .
                                t3lib_BEfunc::BEenableFields('sys_domain') .
                                t3lib_BEfunc::deleteClause('sys_domain')
                        );
                        $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
                        if ($row['domainName'] != '') {
                                return 'http://'.$row['domainName'];
                        }
                }
                return $baseUrl;
        }

Vereinfacht steht hier: wenn eine BaseUrl aus einer Config übergeben wurde, nimm diese, ansonsten nimm eine '.$row['domainName'].

Die Lösung: Crawler Konfig anpassen

In der Regel legt man für den Site Crawler eine Konfiguration in der Root-Seite an.

WEB -> Liste -> "ROOT-SEITE" -> crawler

Crawler Config - Base Url

Dort lässt sich eine Base-URL eintragen, die noch auf http:// verwies.