Deutsche Zope User Group
Gast 2 Benutzer online
DZUG-News

CMF/Plone Meta-Daten

Einrichtung von Meta-Daten fuer Suchmaschinen/Web-Crawler bei CMF/Plone

In Meta-Daten koennen verschiedene nuetzliche Anweisungen fuer Suchmaschinen, Web-Browser und automatische Suchprogramme im Internet ("Robots", Web-Crawler) abgelegt werden. Meta-Daten koennen unter anderem Angaben zum Autor und zum Inhalt der Datei enthalten. Sie koennen aber auch HTTP-Befehle absetzen, zum Beispiel zum automatischen Weiterleiten des Web-Browsers zu einer anderen Adresse.

Seit HTML v4.0 gibt es keine Vorgabe mehr fuer die Meta-Tags, sondern nur noch eine Definition f�r den grunds�tzlichen Aufbau.
Neben den "klassischen" Meta-Daten gibt's auch eine "Dublin Core Metadata Initiative", die vom W3-Konsortium "begruesst" wird. Viele der groesseren Suchmaschinen kommen mittlerweile mit dem Dublin-Core zurecht.

In Plone kleiner v2.0 sollte eigentlich automatisch ein Dublin-Core eingefuegt werden, das scheitert aber daran, dass das entsprechende Python-Script fehlt.
Details und Korrektur siehe weiter unten unter Bemerkungen.


Nun zum Einrichten der Meta-Daten unter Plone:

Im ZMI innerhalb der Plone-Seite auf oberster Ebene das Template "/portal_skins/plone_templates/header" customizen (Button "customize").
Dadurch wird eine Kopie "/portal_skins/custom/header" erzeugt und im ZMI-Editor geoeffnet.

Im oberen Bereich des ZPTs folgenden Abschnitt suchen ...

--CODE-->
tal:content="string:$portal_title - $here_title">Title of page
<--CODE--

... und folgendermassen erweitern:

--CODE-->
tal:content="string:$portal_title - $here_title">Title of page
<--CODE--

Darunter koennen nun die Meta-Tags eingefuegt und an die eigenen Anforderungen angepasst werden:

Beispiel Meta-Daten "klassisch":

--CODE-->




















<--CODE--


Beispiel Meta-Daten nach Dublin-Core:

--CODE-->



content="...">











<--CODE--

Abschliessend nicht das speichern ("save changes") vergessen ;


Bemerkungen:

habe ich im obigen Beispiel fest verdrahtet, da ich noch nicht das Plone-System mit den Keywords verstehe.

Bei den "klassischen" Metadaten habe ich und gemischt. Grund dafuer ist, das viele Suchmaschinen eine Kurz-Beschreibung (meta name="description") mit ca. 200 Zeichen und eine ausfuehrliche Beschreibung (meta name="DC.Description") mit ca. 1000 Zeichen aktzeptieren.

In Plone fehlt fehlt das Script listMetaTags.py "/CMF/CMFDefault/skins/generic", welches im Template "header" aufgreufen werden soll:
--CODE-->
tal:repeat="keyval here/listMetaTags"
tal:attributes="name python:keyval[0];
content python:keyval[1];" />
<--CODE--

Die aktuelle Entwicklung des Python-Scripts findet statt unter
http://cvs.zope.org/Products/CMFDefault/skins/generic/listMetaTags.py
Die derzeit aktuelle Version 1.2 vom 23.12.2003 ist leider unvollstaendig und zudem fehlerhaft.
Nimmt man das folgende Codeteil heraus, werden ein paar DublinCore-Tags geliefert:
--CODE-->
for creator in context.listCreators():
hdrlist.append( ( 'DC.creator', creator ) )
for contributor in context.listContributors():
hdrlist.append( ( 'DC.contributor', contributor ) )
<--CODE--

Damit das Python-Script vom header-Template verwendet wird, erstellt man in
"/portal_skins/custom/" ein Python-Script mit Namen "listMetaTags" und fuegt den
folgenden Inhalt ein:
--CODE-->
hdrlist = []
# These two are import for most search engines
hdrlist.append( ( 'description', context.Description() ) )
hdrlist.append( ( 'keywords', ', '.join( context.Subject() ) ) )
hdrlist.append( ( 'DC.description', context.Description() ) )
hdrlist.append( ( 'DC.subject', ', '.join( context.Subject() ) ) )
#for creator in context.listCreators():
# hdrlist.append( ( 'DC.creator', creator ) )
#for contributor in context.listContributors():
# hdrlist.append( ( 'DC.contributor', contributor ) )
if context.Publisher() != 'No publisher':
hdrlist.append( ( 'DC.publisher', context.Publisher() ) )
created = context.CreationDate()
# Filter out DWIMish artifacts on effective / expiration dates
effective = context.effective_date
eff_str = ( effective and effective.year() > 1000
and effective != created ) and effective.Date() or ''
expires = getattr( context, 'expiration_date', None )
exp_str = ( expires and expires.year() < 9000 ) and expires.Date() or ''
hdrlist.append( ( 'DC.date.created', created ) )
hdrlist.append( ( 'DC.date.modified', context.ModificationDate() ) )
if exp_str or exp_str:
hdrlist.append( ( 'DC.date.valid_range'
, '%s - %s' % ( eff_str, exp_str ) ) )
hdrlist.append( ( 'DC.type', context.Type() ) )
hdrlist.append( ( 'DC.format', context.Format() ) )
hdrlist.append( ( 'DC.language', context.Language() ) )
hdrlist.append( ( 'DC.rights', context.Rights() ) )
# Strip empty values
return filter( lambda x: x[1], hdrlist )
<--CODE--


Infos zu Metadaten:

http://selfhtml.teamone.de/html/kopfdaten/meta.htm#allgemeines
http://dublincore.org/

Geschrieben von RHase . Letzte �nderung 13.02.2004 17:49.