Inhalte abhängig von der Suchindexierung ausgeben
Veröffentlichungsdatum: 18. November 2015
Änderungsdatum: 08. Februar 2022
weblication cms suche volltextsuche searchbot index suchindex user-agent user agent
In der Präsenz nicht verlinkte Dateien können Sie speziell für die Weblication® CMS Volltextsuche einbinden, um diese im Suchindex mit aufzunehmen. Ebenso können Sie bei Aufruf des SearchBot die Ausgabe verändern.
Sollen Dateien von der Weblication® CMS Volltextsuche erfasst werden, die in der Präsenz nicht direkt verlinkt sind, können Sie diese Dateien speziell für die Volltextsuche sichtbar machen.
Fragen Sie über die PHP-Framework Funktion wRequest::isSearchBot auf die Weblication® CMS Volltextsuche ab und geben Sie nur für diese einen Link aus. Dieser Link kann z.B. eine Listendatei sein, die diverse PDF-Dateien einliest oder andere Texte und Bilder beinhaltet.
Diese Möglichkeiten werden in Beispiel 1 und Beispiel 2 erläutert.
Ebenso ist es möglich, bei Seitenaufruf durch die Weblication® Volltextsuche z.B. ein anderes Ausgabetemplate zu verwenden (siehe Beispiel 3).
Beispiel 1: Umsetzung über eine Inhaltsseite
In aktuellen CMS-Versionen und BASE Projekten können Sie zur Umsetzung auf Strukturelemente / Weblics® zurückgreifen und das Vorhaben somit komfortabel über Masken realisieren.
Fügen Sie in einer für die Volltextsuche erreichbaren Seite (z.B. Startseite) das Weblic® / Strukturelement "Bedingter Inhaltscontainer für PHP" ein. In der Quelltext-Box des Elementes setzen Sie eine Abfrage auf den User-Agent der Weblication® Volltextsuche, wofür Sie die Framework-Funktion wRequest::isSearchBot einsetzen können:
Inhalt des Strukturelementes "Bedingter Container für PHP"
if(wRequest::isSearchBot()){
wEnv::setGlobalValue('wSearchBot', 1);
}
Unterhalb des Quelltextes (siehe oben) stellen Sie bei "Nur sichtbar, wenn die globale PHP-Variable" die Auswahlboxen wie folgt ein:
wSearchBot == 1
Ist die Bedingung erfüllt (grüner Kasten) wird die darin gesetzte Liste von Dateien ausgegeben - also nur für die Weblication® Volltextsuche.
Dieses Vorgehen kann z.B. auch für Listen-Einträge verwendet werden, welche nur per Ajax im Browser nachgeladen werden (z.B. per Scrollen) und daher nicht direkt von der Weblication® Volltextsuche erfasst werden können. Eine Alternative hierzu ist, die Start-URL der Volltextsuche auf die Google Sitemap Datei (z.B. /de/google-sitemap.php) zu setzen, da diese meist alle zu erfassenden Datei- und Verzeichnispfade beinhaltet.
Beispiel 2: Umsetzung über HTML Seiten-Template
Beispiel: Auszug aus dem Ansichtstemplate standard.wDocument.php
... <!-- innerhalb des body setzen, um Link für Weblication® SearchBot sichtbar zu machen --> <wsl:php execution="post"> <![CDATA[ if(wRequest::isSearchBot()){ print '<a href="/[PROJEKT]/pdfliste.php" title="PDF-Liste">PDF-Liste</a>'; } ]]> </wsl:php> ...
Beispiel 3: Ausgabe für SearchBot über pre.php verändern
Beim Einsatz bestimmter Objekt-Templates oder Ausgabetemplates innerhalb der Präsenz kann für die Suche ein anderes Ausgabetemplate festgelegt werden.
z.B. können Sie so bei Weiterleitungsseiten (redirect) dafür sorgen, daß die Volltextsuche die Seite nicht weitergeleitet bekommt, sondern über das Standard-Template indexieren kann. Das vermeidet die Indexierung der externen Seite.
Tragen Sie hierzu in der pre.php des globalen Projektes im Bereich der pre-Variablen folgende weitere Abfrage ein (auf Ihr Vorhaben und Pfade angepasst).
Beispiel: Auszug aus der pre.php
// Ansichts-Template beim Besuch des SearchBot für Dateipfade ändern, welche im Pfad /redirect/ beinhalten
// mit dem ersten Parameter true zum isSearchBot-Aufruf werden nur Anfragen vom aktuellen Server erlaubt
if(wRequest::isSearchBot(true) && preg_match("/\/redirects\//", wPageCur::getPath())){
$preVars['viewTemplate'] = '/[IHR-GLOBALES-Projekt]/wGlobal/layout/templates/standard.wDocument.php';
}FAQs
- Wie kann ich Dateien in Weblication® CMS Volltextsuche erfassen, die in der Präsenz nicht verlinkt sind?
- Indem Sie diese Dateien speziell für die Volltextsuche sichtbar machen. Dazu können Sie bei Suchzugriff (SearchBot) eine alternative Ausgabe ausgeben, z.B. über eine Inhaltsseite, ein HTML-Seiten-Template oder durch Anpassungen in der pre.php.
- Woran erkenne ich, ob es sich beim Aufruf um den Weblication® Volltextsuche-SearchBot handelt?
- Nutzen Sie die Framework-Funktion <code class="codeInline">wRequest::isSearchBot()</code>. Dabei geben Sie nur für diese Anfragen eine (suchbare) Ausgabe aus. In den Beispielen wird so gesteuert, dass Links/Listen nur dem SearchBot gezeigt werden.
- Wie setze ich die Steuerung für Inhalte nur für den SearchBot über eine Inhaltsseite um?
- Fügen Sie in einer für die Volltextsuche erreichbaren Seite (z.B. Startseite) das Strukturelement „**Bedingter Inhaltscontainer für PHP**“ hinzu. Setzen Sie in der Quelltext-Box eine Abfrage auf den User-Agent des SearchBots, z.B.: <pre><code class="codeBlock" style="color: #000000">php if(wRequest::isSearchBot()){ wEnv::setGlobalValue('wSearchBot', 1); } </code></pre> Unterhalb des Quelltextes stellen Sie dann „Nur sichtbar, wenn“ die globale PHP-Variable <code class="codeInline">wSearchBot == 1</code> ist. Nur dann werden die im Container definierten Dateien/Listen ausgegeben.
- Wie kann ich über den SearchBot eine Liste von PDF-Dateien oder anderen Inhalten indexierbar machen?
- Stellen Sie für den SearchBot einen Link bereit, der eine geeignete Listendatei ausgibt. Diese Listendatei kann z.B. diverse PDF-Dateien einlesen oder weitere Texte und Bilder enthalten, sodass die Volltextsuche die Inhalte indexieren kann.
- Wie kann ich Inhalte indexierbar machen, die per Ajax (z.B. beim Scrollen) nachgeladen werden und daher nicht direkt erfasst werden?
- Nutzen Sie eine SearchBot-spezifische Ausgabe, die die betreffenden Inhalte trotzdem liefert (z.B. über einen bedingten Container oder Templates). Alternativ kann es helfen, die Start-URL der Volltextsuche auf eine Google-Sitemap-Datei zu setzen (z.B. <code class="codeInline">/de/google-sitemap.php</code>), da diese meist alle zu erfassenden Datei- und Verzeichnispfade enthält.
- Wie kann ich bei Nutzung des Seitencache sicherstellen, dass der SearchBot-spezifische Bereich dynamisch bleibt?
- Wenn Sie im Template mit <code class="codeInline"><wsl:php ...></code> arbeiten, verwenden Sie für den dynamischen SearchBot-Bereich das Attribut <code class="codeInline">execution="post"</code> (wie im Beispiel 2). So bleibt die Ausgabe abhängig vom SearchBot zur Indexierung erhalten.
- Wie kann ich im HTML-Seiten-Template eine SearchBot-spezifische Ausgabe einbauen (z.B. einen Link zur PDF-Liste)?
- Fügen Sie innerhalb des <code class="codeInline">body</code> einen Template-Block ein, der nur für <code class="codeInline">wRequest::isSearchBot()</code> einen Link ausgibt. Beispiel (Auszug): <pre><code class="codeBlock" style="color: #000000">php <wsl:php execution="post"> <![CDATA[ if(wRequest::isSearchBot()){ print '<a href="/[PROJEKT]/pdfliste.php" title="PDF-Liste">PDF-Liste</a>'; } ]]> </wsl:php> </code></pre> So wird z.B. die „PDF-Liste“ nur dem Suchbot sichtbar und kann indexiert werden.
- Wie kann ich die indexierte Ausgabe für den SearchBot durch ein anderes Ausgabetemplate ersetzen?
- Sie können beim Seitenaufruf durch die Weblication® Volltextsuche ein anderes Ausgabetemplate festlegen. In Beispiel 3 wird das über die <code class="codeInline">pre.php</code> realisiert, indem die <code class="codeInline">viewTemplate</code>-Variante für SearchBot-Anfragen gesetzt wird. So kann z.B. verhindert werden, dass Weiterleitungsseiten falsch indexiert werden.
- Wie verhindere ich, dass die Volltextsuche eine Weiterleitungsseite (redirect) indexiert?
- Passen Sie in der <code class="codeInline">pre.php</code> das <code class="codeInline">viewTemplate</code> für SearchBot-Anfragen an. Beispiel: Wenn der Pfad Redirects enthält, wird das Standard-Template genutzt, damit die Volltextsuche nicht die externe Weiterleitungsseite indexiert. Verwenden Sie dafür eine Abfrage wie <code class="codeInline">wRequest::isSearchBot(true)</code> und prüfen Sie den Pfad z.B. auf <code class="codeInline">/redirects/</code>.
- Was bedeutet der Parameter <code class="codeInline">true</code> bei <code class="codeInline">wRequest::isSearchBot(true)</code>?
- Der Aufruf <code class="codeInline">wRequest::isSearchBot(true)</code> wird in Beispiel 3 mit dem Hinweis versehen, dass damit nur Anfragen vom aktuellen Server erlaubt werden. Das dient als zusätzliche Absicherung/Selektion für die SearchBot-spezifische Logik.