Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Berücksichtigung des canocical tags erfolgt nicht im Crawler für den Seitenindex und bei der Suche nach defekten Links #3925

Closed
Shania567 opened this issue Jan 13, 2022 · 16 comments
Milestone

Comments

@Shania567
Copy link

Affected version(s)

4.9.24

Description

Hallo zusammen,
nach dem Upgrade auf Contao 4.9 bin ich auf ein Problem gestoßen:

Contao 4.9.24
php 7.4
MM 2.2
und diverse weitere Erweiterungen
Maria DB 10.5.11

Das Upgrade von Contao 4.4 auf Contao 4.9 habe ich wegen MM erst jetzt durchgeführt. Meine Seite hat mehrere MMs mit zahlreichen Filtermöglichkeiten. Jeder Filter erzeugt eine eigene URL, in Kombination mit den Seiten, die durch das Listenmodul erzeugt werden. Im Ergebnis sind dies auf meiner Seite für den Crawler hunderttausende Seiten. Bisher ist jeder Lauf nach mehreren Stunden wegen eines Mangels an Speicher abgebrochen.
https://community.contao.org/de/showthread.php?82245-Suchindex-per-CLI-bei-ALL-INKL-aufbauen&p=553070&viewfull=1#post553070

Nachvollziehen kann man das Problem in jeder Contaoinstallation, die ein MM mit mehreren Filtern hat. Der Crawler versucht jede Seite mit jeder Filterauswahl einzeln und in jeder möglichen Kombination aus diesen zu crawlen. Die Seitenanzahl steigt dadurch extrem an.

Lösen könnte man das Problem durch setzen des canonical tags und dessen Berücksichtigung im Crawler.

Ein Upgrade auf 4.12 oder 4.13, wo das canonical tag schon berücksichtigt wird, ist wg. MM jedoch nicht möglich, obwohl man als Nutzer von MM besonders betroffen ist. Grundsätzlich wird das jedoch auch durch andere Erweiterungen, die ebenso URLs erzeugen, genauso passieren können.

Daher kam die Idee auf, die Funktion, dass das canonical tag im Crawler berücksichtig wird und somit nur die Haupt-URL gecrawlt wird, für 4.9 rückzuportieren. Hier kann man im Standard zwar kein canonical tag festlegen, doch gibt es dafür eine funktionsfähige Erweiterung. Es geht also lediglich um die Funktion das tag im Crawler zu berücksichtigen, um Systemabstürze zu vermeiden und den Crawler überhaupt nutzen und damit eine Suchindex aufbauen zu können.

Derzeitiger Workaround:
Damit der Crawler auf meiner Seite überhaupt durchläuft, ist es notwendig alle Filter für die Laufzeit des Crawlers zu deaktivieren. Da der Crawler nicht im Wartungsmodus läuft, geht dies nur im Livebetrieb, was sehr unschön ist. Denn auch der Lauf in einer Kopie und das nachträgliche umhängen der Domain ist nicht möglich. Dann hat man in den Suchergebnissen die Sudomain stehen, die man genutzt hat um den Crawler laufen zu lassen.

Bei geschäftlichen Seiten wäre dies sicher ein Grund nicht in den Livebetreib zu gehen. Eine große Seite ist ohne Suchfunktion relativ nutzlos. Ohne Upgrade ist es aber auch schlecht, da es für 4.4 nun keine Sicherheitsupdates mehr gibt. Auf die aktuelle Version upgraden geht mit MM aber auch nicht bzw. wird das nicht supportet. Daher nun dieser Vorschlag.

Das Thema wie wir uns dem Problem genähert haben, ist hier vollständig nachzulesen:
https://community.contao.org/de/showthread.php?82245-Suchindex-per-CLI-bei-ALL-INKL-aufbauen

Ich würde mich sehr freuen, wenn das klappen würde.
Shania

@Toflar
Copy link
Member

Toflar commented Jan 13, 2022

Backporten ist leider nicht so einfach, deshalb wurde es nicht gemacht. Aber wenn die Links für einen Crawler eh irrelevant sind, kannst du doch einfach rel="nofollow" auf die Links packen?

@Shania567
Copy link
Author

Ich wüsste nicht, dass das bei MM ginge. Die Links werden ja durch die von mir mit MM erzeugten Filter erstellt und da kann ich das m.W. nicht mitgeben. Vielleicht kann zonky etwas dazu sagen. Ich hab den Link hierher in den Forenbeitrag gestellt. Er wird bestimmt auch hier rein schauen.

@Toflar
Copy link
Member

Toflar commented Jan 13, 2022

Ich denke mal, der wird auch auf Templates basieren, aber da kann ich nichts zu sagen. Aber grundsätzlich wäre es auf jeden Fall sinnvoll, rel="nofollow" zu definieren, wenn man bereits weiss, dass die Zielseite für einen Crawler irrelevant sein wird. Das errleichtert den Crawlern die Arbeit :)

@zonky2
Copy link
Contributor

zonky2 commented Jan 13, 2022

Ich wüsste nicht, dass das bei MM ginge. Die Links werden ja durch die von mir mit MM erzeugten Filter erstellt und da kann ich das m.W. nicht mitgeben. Vielleicht kann zonky etwas dazu sagen. Ich hab den Link hierher in den Forenbeitrag gestellt. Er wird bestimmt auch hier rein schauen.

dite macht der ;-)

Man kann für jedes Filterwidget ein individuelles bzw. angepasstes Template auswählen - dort hat man Zugriff auf alle relevanten Daten, um ein eigenes Widget bzw. das HTML dazu zu bauen... mach mal ein dump($this)
Manchmal ist es auch einfacher, per str_replace(...) was einzuschleusen.

@fritzmg
Copy link
Contributor

fritzmg commented Jan 13, 2022

Backporten ist leider nicht so einfach, deshalb wurde es nicht gemacht.

@Toflar It's just these lines, isn't it?

if (($canonical = $document->extractCanonicalUri()) && ((string) $canonical !== (string) $document->getUri())) {
$this->throwBecause(sprintf('Ignored because canonical URI "%s" does not match document URI.', $canonical));
}

But for @Shania567 's use case the rel="nofollow" approach is better anyway. Otherwise the crawler would still actually crawl each filter and pagination URL - only for the DefaultIndexer to discard it later due to the canonical tag.

@Shania567
Copy link
Author

Ich lasse gerade den Crawler nochmal laufen, um tote Links zu suchen, weil ich schon viele korrigiert habe. Zumindest dabei werden auch ganz viele noindex nofollow Links in den Log geschrieben. Schon einer von jeder Seite allein durch das Consenttool der Marketing Suite. Beim Aufbau des Suchindexes war mir das nicht aufgefallen. Wenn es dabei anders ist, wäre das ja ok.

Man kann für jedes Filterwidget ein individuelles bzw. angepasstes Template auswählen - dort hat man Zugriff auf alle relevanten Daten, um ein eigenes Widget bzw. das HTML dazu zu bauen... mach mal ein dump($this)
Na ja, das würde meine Fähigkeiten dann wohl übersteigen. Dass man auch bei den Filtern eigene templates nutzen kann, ist mir schon klar, aber dazu muss man sicherlich bessere Programmierkenntnisse haben als ich sie habe. Aber ich kann es mir ja am Wochenende mal anschauen.

Im Prinzip wäre es ja wahrscheinlich sogar besser, wenn man die Filterseiten als Standardeinstellung von MM als noindex, nofollow definiert oder gäbe es irgendwelche Gründe, weshalb man diese Seiten im Suchindex haben möchte?

@fritzmg : Thanks for your input.

@zonky2
Copy link
Contributor

zonky2 commented Jan 13, 2022

Im Prinzip wäre es ja wahrscheinlich sogar besser, wenn man die Filterseiten als Standardeinstellung von MM als noindex, nofollow definiert oder gäbe es irgendwelche Gründe, weshalb man diese Seiten im Suchindex haben möchte?

das hatte @MacKP ja so vorgeschlagen... Du wolltest die Listenseite mit Filter indexiert haben - siehe https://community.contao.org/de/showthread.php?82245-Suchindex-per-CLI-bei-ALL-INKL-aufbauen/page2&p=553422&viewfull=1#post553422

Generell in das Filter-Widget ein nofollow wäre m.E. nicht sinvoll, da man mit der Listenausgabe auch auf andere Seiten verlinken kann und nicht nur auf die eigene zum Filtern einer Liste - da ist ggf. eine Indexierung gewünscht.

Wir gucken mal, ob und wie man das als Feature bei MM einbauen kann.

@MacKP
Copy link
Contributor

MacKP commented Jan 13, 2022

Davon mal ab: nofollow auf eine select option oder so ist mir bisher noch nicht untergekommen (da wir ja von Filtern reden und die sind öfter mal als Select o.ä. aufgebaut) ;-)

@zonky2
Copy link
Contributor

zonky2 commented Jan 13, 2022

...es geht nur um die Option der Ausgabe als Linkliste beim MM-Filterwidget (Filterregeln Select, Tags, Register)

@Toflar
Copy link
Member

Toflar commented Jan 13, 2022

Ja klar, wenn auch nach kaputten Links gesucht werden soll, wird rel="nofollow" ignoriert. Wäre sonst ja kein sonderlich sinnvoller Check :)

@Shania567
Copy link
Author

Shania567 commented Jan 13, 2022

Du wolltest die Listenseite mit Filter indexiert haben
Wenn ihr das so verstanden habt, war das nicht das was ich meinte, sorry. Ich möchte nur, dass die Seite, wo Liste als Modul eingebunden ist, indiziert wird, nicht aber alle Seiten mit den möglichen Filterkombinationen und wenn ich die gesamte Seite auf noindex setze, passiert ja genau das. Und am Filter kann ich derzeit ja nirgends sagen, dass diese dann erzeugten Seiten nicht indiziert werden sollen. Es geht nur alles oder nichts. Das ist ja gerade das Problem.

Ja klar, wenn auch nach kaputten Links gesucht werden soll, wird rel="nofollow" ignoriert. Wäre sonst ja kein sonderlich sinnvoller Check :)

Ok, aber all diese Seiten stehen dennoch im im Log. Die .csv ist vollgelaufen mit über 8 MB. Dann ist der Job wieder abgebrochen.

@leofeyer leofeyer added the bug label Jan 25, 2022
@leofeyer leofeyer added this to the 4.9 milestone Jan 25, 2022
@stale
Copy link

stale bot commented Mar 27, 2022

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the stale label Mar 27, 2022
@fritzmg fritzmg removed the stale label Mar 28, 2022
@stale
Copy link

stale bot commented Jun 12, 2022

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@zonky2
Copy link
Contributor

zonky2 commented Sep 7, 2022

@Shania567: ich habe mir die FE-Filter nochmal angesehen - alle Filter(Blöcke) haben im Quelltext ein indexer stop, so dass die ggf. darin enthaltenene URL nicht weiter verfolgt werden sollten - oder ist das ein Trugschluß? @Toflar

@fritzmg
Copy link
Contributor

fritzmg commented Sep 7, 2022

indexer::stop betrifft nur den Default Indexer von Contao, nicht aber den Crawler.

@zonky2
Copy link
Contributor

zonky2 commented Sep 7, 2022

indexer::stop betrifft nur den Default Indexer von Contao, nicht aber den Crawler.

ahh - o.k, - Danke für die Info!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

6 participants