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
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:
- Alle Seiten in die Warteschlange aufnehmen
typo3/cli_dispatch.phpsh crawler_im 1 -d 99 -conf indexall -o queue - 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.
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
Dort lässt sich eine Base-URL eintragen, die noch auf http:// verwies.