Ergebnis 1 bis 25 von 25

Thema: Ausschluss von Filter-URLs vom Contao Suchindex

  1. #1
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard Ausschluss von Filter-URLs vom Contao Suchindex

    Nachdem die Sitemap so aussieht, wie ich es möchte, geht es jetzt noch um den Suchindex innerhalb von Contao.

    Nachdem ich ihn neu aufgebaut habe, sieht er weitgehend so aus, wie ich es mir wünsche (einige Links sind Filterlinks im Text und so direkt im Suchindex), aber dann kommen die ganzen Filter-URLs dazu, sobald ein Filter im Frontend angewendet wird.

    Ich habe dies hier im Handbuch gefunden:

    https://metamodels.readthedocs.io/de...m-search-index

    Ich habe diesen Codeblock ganz nach oben ins Template eingefügt, damit keine URL aufgenommen wird, die auch Filter enthält. Sie werden dennoch alle aufgenommen. Wo muss dieser Block hin, wenn ich alle Filter-URLs nicht im Suchindex möchte. Oder funktioniert der in 5.3 nicht mehr?
    Viele Grüße
    Shania

  2. #2
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    guck mal in den Quelltext (ganz unten) der Seite, bei aktivem Filter - ist den JSON-LD-Daten der Parameter noSearch auf true?

  3. #3
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard

    Du meinst das hier?

    Code:
    {
        "@context": "https:\/\/schema.contao.org",
        "@graph": [
            {
                "@type": "Page",
                "fePreview": false,
                "groups": [],
                "noSearch": false,
                "pageId": 198,
                "protected": false,
                "title": "Farbschläge und die Geschlechtsbestimmung der Nymphensittiche"
            }
        ]
    }
    Viele Grüße
    Shania

  4. #4
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    das sollte dann so aussehen

    Code:
    "noSearch": true,
    etwas verwirrend mit der doppelten Verneinung

    Wird der Code von Dir auch ausgeführt? mal debuggt?

  5. #5
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard

    Im Debugmodus gibt es keine Fehler mehr. Die hatte ich beseitigt.

    Was kann ich sonst tun?
    Viele Grüße
    Shania

  6. #6
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
     if (!empty($this->filterParams)) {
         global 
    $objPage;
         
    $objPage->noSearch true;
    dump('Moin');
     } 

  7. #7
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard

    Sobald ein Filter gesetzt ist, steht "Moin" auf der Seite.
    Viele Grüße
    Shania

  8. #8
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    o.k.! ... hmmm müsste man mal recherchieren, ob $objPage->noSearch noch geht in 5

  9. #9
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    o.k.! ... hmmm müsste man mal recherchieren, ob $objPage->noSearch noch geht in 5
    hab das bei mir auch mal getestet - das zeigt keine Wirkung mehr

    wie gesagt, mal hier im Forum oder auf Slack fragen, wie man das manipulieren kann - das ist ja eine von MM unabhängige Frage

  10. #10
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard

    Hach, das ist blöd .

    Sluck kenne ich bisher gar nicht. Aber ich frage dann später mal an anderer Stelle im Forum. Danke fürs testen und bestätigen. So war ich wenigstens nicht zu blöd .
    Viele Grüße
    Shania

  11. #11
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    Hier findest Du den "Einladungslink" zum Contao Workspace auf Slack

    https://contao.org/de/netzwerk

    vorher musst Du Dir m.E. einen Account erstellt haben bei Slack

  12. #12
    Contao-Nutzer
    Registriert seit
    16.06.2017.
    Beiträge
    70

    Standard

    noSearch wurde in Contao 5.6 mit searchIndexer ersetzt.

    https://github.com/contao/contao/pull/8252

    Beim Upgrade von einer älteren Contao-Version auf 5.6 werden die alten Datenbankfelder "noSearch" mit dem Wert "1" (="true") automatisch migriert werden zu "searchIndexer"->"never_index".

    In den JSON-LD-Daten (im HTML-Quelltext am Seitenende) ist dies unter "searchIndexer" enthalten, falls auf der jeweiligen Seite im Backend ein Wert ausgewählt/eingestellt wurde.

    Der Wert im JSON-LD kann leer sein, oder "never_index" oder "always_index" und sollte (um bei eurem Beispiel oben zu bleiben) mit $objEvent->searchIndexer abgefragt werden können.

  13. #13
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    es geht ja nicht darum den abzufragen, sondern um den Wert in einem Template zu setzen!

  14. #14
    Contao-Nutzer
    Registriert seit
    16.06.2017.
    Beiträge
    70

    Standard

    Sorry, das meinte ich (setzen, nicht abfragen). Müsstet ihr ggf. ausprobieren, ob es vielleicht funktioniert, wenn ihr euren Beispielcode entsprechend anpasst, also z.B.

    PHP-Code:
    if (!empty($this->filterParams)) {
      global 
    $objPage;
      
    $objPage->searchIndexer="never_index";
      
    dump('Moin');
     } 
    Da es das searchIndexer-Feld aber erst ab Contao 5.6 gibt und es hier um Contao 5.3 geht, dürfte das im aktuellen Fall aber vermutlich alles irrelevant sein (nochmals sorry, hatte ich eben erst beim zweiten Lesen gesehen. Das mit dem searchIndexer kam mir nur beim ersten Lesen direkt in den Sinn, weil es um das noSearch-Feld ging und die Frage, ob es da Änderungen in Contao 5 gab...

    Sobald ein Filter gesetzt ist, steht "Moin" auf der Seite.
    Ich denke das ist an sich richtig – sollte nicht genau das bei dem Beispielcode passieren? (Wenn ein Filter gesetzt ist, gib "Moin" zurück. )

    Zum Prüfen, ob der JSON-LD-Wert geändert wurde, müsstest du den Dump auskommentieren und dann in der Ausgabe (ohne Dump) im Quelltext die JSON-LD-Daten ansehen. Sollte dann entweder "noSearch"->"true" oder (ab Contao 5.6 dann) "searchIndexer"->"never_index" enthalten.

  15. #15
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von contaotester Beitrag anzeigen
    Ich denke das ist an sich richtig – sollte nicht genau das bei dem Beispielcode passieren? (Wenn ein Filter gesetzt ist, gib "Moin" zurück. ).
    das ist korrekt!


    und wie geschrieben, das

    PHP-Code:
    global $objPage;
    $objPage->noSearch true
    hat in C 5.3 (leider) keine Wirkung mehr im JSON-LD

  16. #16
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    das könnte gehen
    PHP-Code:

    use Contao\CoreBundle\Routing\ResponseContext\JsonLd\ContaoPageSchema;
    use 
    Contao\CoreBundle\Routing\ResponseContext\JsonLd\JsonLdManager;
    use 
    Contao\System;

    $responseContext System::getContainer()->get('contao.routing.response_context_accessor')->getResponseContext();
    if (
    $responseContext?->has(JsonLdManager::class)) {
        
    /** @var JsonLdManager $jsonLdManager */
        
    $jsonLdManager $responseContext->get(JsonLdManager::class);
        
    $schema        =
            
    $jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_CONTAO)->get(ContaoPageSchema::class);
        
    $schema->setNoSearch(true);


  17. #17
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard

    Danke zonky! Das muss auch in das Listentemplate nach ganz oben oder wo soll ich das einfügen? Dann teste ich es direkt .
    Viele Grüße
    Shania

  18. #18
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard

    Ich habe es in eins der Listentemplates eingefügt und es scheint zu funktionieren. Ich werde es mit den anderen Templates auch noch testen und melde mich nochmal dazu. Das kann allerdings wieder etwas dauern, da ich gleich erst noch anderes zu erledigen habe.

    Danke!
    Viele Grüße
    Shania

  19. #19
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard

    Also, das funktioniert soweit zuverlässig, danke!

    Gut fände ich noch, wenn auch die Seiten nicht aufgenommen würden. Also solche URLs:

    Code:
    /futterbausteine/page/5.html
    Kann man das dort vielleicht auch mit unterbringen?

    Damit sollte die Suche dann wieder gute Ergebnisse liefern .


    Ich habe mir die Seiten nun auch nochmal im Quellcode angesehen.

    Oben bei den Metainfos steht auch bei den Filter-URLs ein "index, follow" und wenn ich "canonical" in der Startseite anhake, sind auch die Filter-URLs canonical.

    Ich würde gerne nur die Einstiegsseite der Liste als "canoical" auszeichnen (sagt man das so?) und außerdem die Filter-URLs mit "noindex, follow". Das wäre dann für mich "rund".

    Kann man das auch noch erreichen?
    Viele Grüße
    Shania

  20. #20
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Shania Beitrag anzeigen
    Gut fände ich noch, wenn auch die Seiten nicht aufgenommen würden. Also solche URLs:

    Code:
    /futterbausteine/page/5.html
    Du könntest prüfen, ob der GET-Parameter "page" gesetzt ist und dann analog der Filter-Bedingung die Indexierung ausschließen.

  21. #21
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.954
    Partner-ID
    10107

    Standard

    Zitat Zitat von Shania Beitrag anzeigen
    Gut fände ich noch, wenn auch die Seiten nicht aufgenommen würden. Also solche URLs:

    Code:
    /futterbausteine/page/5.html
    Kann man das dort vielleicht auch mit unterbringen?

    Damit sollte die Suche dann wieder gute Ergebnisse liefern .
    Du könntest in den Einstellungen der Seite die Canonical URL auf sich selbst setzen.
    » sponsor me via GitHub or Revolut

  22. #22
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du könntest in den Einstellungen der Seite die Canonical URL auf sich selbst setzen.
    Ah, super, das klappt . Danke!
    Viele Grüße
    Shania

  23. #23
    Contao-Fan
    Registriert seit
    20.06.2009.
    Beiträge
    635

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Du könntest prüfen, ob der GET-Parameter "page" gesetzt ist und dann analog der Filter-Bedingung die Indexierung ausschließen.
    Ok, das klappt so nun auch :

    PHP-Code:
    <?php

    use Contao\CoreBundle\Routing\ResponseContext\JsonLd\ContaoPageSchema;
    use 
    Contao\CoreBundle\Routing\ResponseContext\JsonLd\JsonLdManager;
    use 
    Contao\System;

    // Prüfen, ob Filter aktiv sind
    $isFilterActive = !empty($this->filterParams);

    // Prüfen, ob GET-Parameter "page" gesetzt ist (Pagination)
    $isPagination = isset($_GET['page']) && $_GET['page'] !== '';

    if (
    $isFilterActive || $isPagination) {

        
    $responseContext System::getContainer()
            ->
    get('contao.routing.response_context_accessor')
            ->
    getResponseContext();

        if (
    $responseContext?->has(JsonLdManager::class)) {

            
    /** @var JsonLdManager $jsonLdManager */
            
    $jsonLdManager $responseContext->get(JsonLdManager::class);

            
    $schema $jsonLdManager
                
    ->getGraphForSchema(JsonLdManager::SCHEMA_CONTAO)
                ->
    get(ContaoPageSchema::class);

            
    // Seite aus der Suche ausschließen
            
    $schema->setNoSearch(true);
        }
    }
    ?>
    Dann sollte nun alles passen, denke ich .

    Danke euch!
    Viele Grüße
    Shania

  24. #24
    Wandelndes Contao-Lexikon Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    10.439
    User beschenken
    Wunschliste

    Standard

    statt auf $_GET direkt zuzugreifen solltest du lieber \Contao\Input::get('page') verwenden

  25. #25

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •