Daten aus SQL Tabelle auslesen und in Meta Tags einfügen

  • Hallo zusammen.


    Ich denke, die Überschrift sagt für einige schon etwas aus. Ich frage mich gerade, ob ich aus einer SQL Tabelle Daten auslesen kann (z. B. bestimmte Wörter), um diese dann mittels PHP in die Meta Tags für SEO einzufügen. Dabei möchte ich dynamisch agieren, dass heißt, für verschiedene Contents auch verschiedene Meta Tags einsetzen. Ich nutze PHPDirect.


    Um ganz konkret zu werden und es auch nochmal zu verdeutlichen:


    Ich habe in einer SQL Datei Stellenanzeigen gespeichert (unter anderem auch den Einsatzort). Dazu habe ich lediglich einen Beitrag erstellt (Nennen wir den Beitrag "Stellenanzeige", der die Daten mit den Stellenausschreibungen aus MySQL ausliest und auch ausgibt. Jetzt möchte ich aber von diesem Beitrag "Stellenanzeige" die Meta Tags mit Variablen versehen, sodass ich die entsprechenden Wörter abhängig von der Stellenanzeige automatisch mit ändern kann. Wenn der Einsatzort z. B. in $einsatzort gespeichert ist, möchte ich die Meta Tags quasi wie folgt erstellen:


    PHP
    1. <meta property="og:title" content="blablabla in <?php echo $einsatzort; ?>" />
    2. <meta property="og:description" content="blablabla in <?php echo $einsatzort; ?>" />


    Dazu muss ich ja irgendwie an den Head-Bereich des Beitrags "Stellenanzeige" herankommen. Ist das innerhalb Joomla irgendwie umsetzbar?

  • Ich versteh zwar nicht ganz, was du vorhast, aber grundlegend kannst wie folgt etwas in den HEAD der Seite einsetzen lassen

    Code
    1. $doc = JFactory::getDocument();
    2. $doc->setMetaData('og:image', 'https://cdn.joomla.org/images/Joomla_logo.png', 'property');

    erzeugt:

    Code
    1. <meta property="og:image" content="https://cdn.joomla.org/images/Joomla_logo.png" />
  • Danke, Later,


    Das hilft mir aber nur teilweise zur Lösung.


    Mein Problem ist aktuell, dass ich noch gar nicht richtig weiß, wo genau ich diese Änderungen am Head vornehmen muss/kann. Ich will das ja wie gesagt NUR für den Beitrag "Stellenanzeige" vornehmen. Die anderen Beiträge, Menüs etc. sollen davon nicht betroffen sein.


    Das mag eine ziemlich dumme Frage sein, liegt aber einfach daran, dass ich in Joomla trotz einigermaßen vorhandener PHP Kenntnissen noch nicht "zuhause" bin.

  • Later, danke. Natürlich weiß ich, dass man mit DirectPHP Code in den Beitrag einsetzen kann. Das habe ich natürlich auch längst versucht. Den Code, den ich dort dann aber einsetze, der erscheint ja nicht im <head> Abschnitt oben. Heißt, ich muss mitten im Body nochmals ein neues <head> eröffnen. Du wirst sicherlich zustimmen, dass das logischerweise dann von der Funktionalität her nicht gehen kann -> Tut es auch nicht.


    Danke auch dir JohannesK Mit dem Overwrite der Hinweis war sicherlich gut. Allerdings ist genau dort der Punkt, in dem ich noch nicht so fit bin. Wie zur Hölle finde ich die entsprechende Datei, in der ich einen Overwrite machen muss/kann, um den Header vom Beitrag Stellenanzeige zu ändern.

  • Den Code, den ich gepostet habe, kann man nahezu überall in Joomla einsetzen. Er kümmert sich darum, dass der generierte Meta-Tag später automatisch in den HEAD der Seite eingesetzt wird und nicht mitten im Beitrag ausgegeben wird. Das "Document", dass man in der 1. Zeile erzeugt meint quasi die später komplett gerenderte Seite.


    Soweit ich mich erinnere, kann mich täuschen, sollte das auch mit DirectPHP funktionieren solche Joomla-API-Codes zu verwenden.

  • So, nun habe ich das ganze mal ausprobiert.


    Es funktioniert aber leider nur teilweise mit deinem Code, Later.


    Im Quelltext erscheinen die Parameter Title, URL und Description, wie sie es eigentlich auch sollen. Was nicht erscheint, wie es soll, sind die Keywords


    Außerdem kommt nun noch erschwerend folgendes hinzu: Mit deinen Zeilen wird der Quelltext in der Tat im Header platziert. Dennoch werden die Tags nicht wirklich vom Browser genutzt, weil es wahrscheinlich nicht die letzt definierten Meta Tags sind.


    Beispiel: Der richtigerweise im Quelltext erscheinende Title wird vom Browser gar nicht angezeigt, weil etwas tiefer im Header ein weiteres mal ein Meta Tag Title definiert wird mit dem einfachen Begriff "Stellenanzeige", weil der Beitrag wahrscheinlich so heißt. Folglich gibt der Browser als Title "Stellenanzeige" aus.


    Ich muss also entweder die letzten Tags irgendwie entfernen können, oder die Platzierung mittels deiner Zeilen als letzte Meta Tags irgendwie definieren.


    Ich hoffe, ich konnte die Problematik einigermaßen verständlich machen und freue mich auf deine Ideen.

  • Dein Einstieg waren OPEN-GRAPH-Tags, also vornehmlich die für Facebook! Deshalb ist mir jetzt nicht mehr ganz klar, worüber du redest. OG Tags interpretiert der Browser nicht...


    OG:

    Teste die mit dem Facebook OG-Tester-Tool https://developers.facebook.com/tools/debug

    Vergiss dabei nicht (weiß nicht mehr wie der Knopf heißt) dessen Cache immer wieder zu löschen.


    Wenn du bereits og-Meta-Tags im Dokument hast, so, dass tatsächlich doppelte auftauchen, müsste man erst in Erfahrung bringen, wie die dort eingesetzt werden und wer was wann, damit man sie ggf. zuvor beseitigt, bevor man dann die eigenen setzt.


    ------

    Standard-Meta-Tags setzt Joomla so. Wenn alle Erweiterungen brav diese Methoden verwenden, ist gewährleistet, dass sie wenigsten nie doppelt erscheinen:

    Code
    1. $doc = JFactory::getDocument();
    2. $doc->setTitle('Ich bin der Browser-Titel');
    3. $doc->setDescription('Ich bin die Description');
    4. $doc->setMetaData('keywords', 'key, key2, key3');

    Aber auch hier gilt, dass das irgendwo auf dem Weg bis zur Ausgabe irgendwas wieder überschreiben könnte.


    (Deshalb wickel ich so Kram auch über eigene System-Plugins ab, weil es letztlich, mehr oder weniger aufwendig, die einzige Möglichkeit ist, verlässlich unerwünschten Kram irgendwie aus dem Dokument zu entfernen, eigenen einzusetzen oder auszutauschen.)

  • Also erstmal danke Later, auch dieser Beitrag hat mir sehr weitergeholfen und Entschuldigung für die Verwirrung, die ich gestiftet habe. Es ging mir in der Tat eigentlich nicht um die Facebook Parameter, sondern um die Standard Tags. Aber so hatte ich gleich mal die Möglichkeit, auch die Facebook Tags festzulegen. War also auch gar nicht so schlecht... ;-)


    Zu Facebook, das habe ich nun im Griff. Da wird alles so angezeigt, wie es soll. Das Prinzip ist mir nun klar. Habe ich auch auf der Developer Seite bereits getestet (Scrapen hieß übrigens der Knopf, den du gemeint haben dürftest ;-)


    Die Standard Tags habe ich nun ebenfalls eingearbeitet. Außerdem habe ich mal die Plugin-Liste angeschaut, weil ich in Erinnerung hatte, dass ich vor längerer Zeit einmal Plugins für die Meta Tags ausprobiert hatte, diese letztlich aber nicht genutzt hatte. Diese habe ich jetzt mal komplett deinstalliert und siehe da... Der Quelltext schaut schon deutlich ordentlicher aus, auch was die Meta Tags angeht. Es gibt also keine Doppelt und Dreifachen Tags mehr. Danke für den Hinweis.


    Also auch die Standard Meta Tags werden im Quelltext nun alle korrekt angezeigt, Ein kleines Problemchen ist nun eigentlich nur noch geblieben.


    Der Browser zeigt als Title immer noch "Stellenanzeige" an. Das kann er sich eigentlich nur noch aus


    <title>Stellenanzeige</title>


    ziehen, weil sonst kein Meta Tag mehr als Title "Stellenanzeige" ausweist.


    Die Frage ist nun, wie kommt dieser Title dahin und wie bekomme ich ihn weg bzw. ignoriert.


    Es gibt sowohl einen Menü-Eintrag mit "Stellenanzeige" als auch einen Beitrag mit "Stellenanzeige". Habe ich beides gecheckt, ich habe aber nirgendwo eine Einstellungsmöglichkeit gefunden, wie man diesen Title ausschalten/ignorieren oder was auch immer kann, damit das System den von mir vorgegebenen Meta Tag als Title ausgibt.


    Irgendeine Idee?

  • Das würde mein Problem wohl final lösen.

    Wohl nicht, weil du komplett umdenken musst.


    Jede Erweiterung in Joomla kann diese Methode setTitle() zum Setzen des TITLE nutzen.

    Dabei gewinnt der Code, der im Joomla-Ablauf zuletzt ausgeführt wird.

    Wenn also dein so gesetzter TITLE nicht sichtbar wird und du sicher bist, keinen Programmierfehler drinnen zu haben, ist dein Code, im Beitrag eingesetzt, zu früh, weil irgendwas es im folgenden Ablauf besser weiß und deinen TITLE wieder überschreibt.

    Deshalb wickel ich so Kram auch über eigene System-Plugins ab, weil es letztlich, mehr oder weniger aufwendig, die einzige Möglichkeit ist, verlässlich unerwünschten Kram irgendwie aus dem Dokument zu entfernen, eigenen einzusetzen oder auszutauschen.

    D.h. Du musst komplett umbauen. Du benötigst ein eigenes System-Plugin, das unter Nutzung der Methode (= sog. Plugin-Event) "onBeforeCompileHead()" diese ganzen HEAD-Daten möglichst spät zusammenstellt, eben bevor Joomla anfängt, diese sonstwo gesammelten Daten dann in den Quelltext einzusetzen.


    Also

    - Identifizierung im Plugin, ob gerade ein Beitrag abgewickelt wird und welcher.

    - Datenbankabfrage für die nötigen Daten.

    - Zusammenstellen der HEAD-Daten und Einsetzen wie oben zu sehen.


    Perfekt(er) wäre die Sache aber erst, wenn du im selben Plugin die Methode onContentPrepare() nutzt, weil dort der Beitrag, der vielleicht in dein Raster fällt, schon bekannt ist und nicht noch mal extra abgefragt werden muss, was in onBeforeCompileHead() leider der Fall wäre. Die so erhaltenen Daten speichert man dann z.B. in einer static Variable zwischen, damit onBeforeCompileHead(), was erst später ausgeführt wird, darauf zugreifen kann.


    Außer, dir reicht die ID des Beitrags, um an deine DB-Daten dran zu kommen. Das geht dann wieder recht einfach auch in onBeforeCompileHead().


    Siehst schon: Da ist noch einige Einarbeitung/Programmierung/Umdenke nötig. Das sprengt jetzt aber meinen "Guten Willen" bzgl. ehrenamtlicher Forumsarbeit bei Weitem ;-) Auch, wenn man weiß, wie das geht, kommen doch einige oder mehr Stünderl zusammen, bis das dann individualisiert für eine Seite rund läuft.


    Eine Möglichkeit wäre vielleicht, mit Javascript zu arbeiten, das du im Beitrag einsetzt, das den TITLE-Tag dann austauscht. Bin da aber nicht auf dem Laufenden, ob Suchmaschinen heutzutage überhaupt JavaScript ausführen. Die das also mitbekämen.