Automatisch generierte Title-Tags
Juli 16, 2006 on 3:09 pm | In Codebeispiele | No CommentsEin Problem bei größeren Weblication-Projekten und/oder Projekten, die pflegbar erstellt werden, ist der oft gleich lautende Titel. Meist wird dabei der Name des Projektes respektive der Firma verwendet:
<title>Musterfirma</title>
Besser - sowohl für den Nutzer, der den Titel in der Titelleiste des Browsers und in den Tabs sieht, als auch für Suchmaschinen - ist ein Titel der, welcher auch der Hierarchie des Webseitenprojektes folgt. Ebendieses lässt sich mit Hilfe eines kleines Skriptes elegant lösen.
function showNavPath($file='', $seperator = ' - ', $direction='right') { if($file=='') { $file = './standard.wNavigation.xml'; } if(is_file($file)) { $content = @file($file); if(count($content)==0) { echo '-'.$_SERVER['HTTP_HOST']; return false; } } else { echo $_SERVER['HTTP_HOST']; return false; } if($_GET['navanchor'] != '') { $searchfor = 'navanchor'; $searchfor_value = $_GET['navanchor']; } if($_GET['navid'] != '') { $searchfor = 'navid'; $searchfor_value = $_GET['navid']; } if($searchfor == '') { $searchfor = 'url'; $searchfor_value = $_SERVER['REQUEST_URI'].'index.php'; } $prev = false; $anzahl = count($content); for($i=$anzahl; $i>=0; $i--) { $line = $content[$i]; if(stristr($line, 'navPoint')) { $pat1 = preg_match('/level="([0-9]*)"/i', $line, $match1); $pat2 = preg_match('/ link="([0-9a-z\-\/\.]*)"/i', $line, $match2); $pat3 = preg_match('/navanchor="([0-9]*)"/i', $line, $match3); $pat4 = preg_match('/navlink="([0-9]*)"/i', $line, $match4); $pat5 = preg_match("/text=\"(.*)\"/i", $line, $match5); //echo print_r($match2).$line; switch($searchfor) { case 'navanchor': if($match3[1]==$searchfor_value) { $search_find[] = $match5[1]; $prev = $match1[1]-1; } break; case 'navid': if($i==$searchfor_value) { $search_find[] = $match5[1]; $prev = $match1[1]-1; } break; case 'url': $r[] = $match2[1].' == '.$searchfor_value; if($match2[1] == $searchfor_value) { $search_find[] = $match5[1]; } break; } if(checkPreviousLevel($prev, $match1[1])) { $search_find[] = $match5[1]; $prev = $match1[1]-1; } } } if(count($search_find)>0 && is_array($search_find)) { if($direction=='right') { $search_find = array_reverse($search_find); } return implode($seperator, $search_find); } else { echo $_SERVER['HTTP_HOST']; return false; } } function checkPreviousLevel($prev, $level) { if($prev == $level) { return true; } else { return false; } }
Dieses Skript gibt die aktuelle Position in der Navigatiosnhierarchie wieder. Man speichert diesen Code am besten als showNavPath.php ab und diese Datei legt man ins structure-Verzeichnis des aktuelles Projektes, z.B. (/wDeutsch/wLayout/structure/showNavPath.php).
Der Einbinden und Aufruf des Skriptes sieht folgendermaßen aus:
require_once ($_SERVER["DOCUMENT_ROOT"].'/wDeutsch/wLayout/structure/showNavPath.php'); echo showNavPath();
Als Parameter können mitgegeben werden:
- Der Pfad zur standard.wNavigation.xml (Standard ist die gleiche Ordnerebene, in der die standard.wNavigation.xml liegt)
- Das zu verwendende Trennzeichen (Standard ein ” - “)
- Anzeige der Reihenfolge der Navigationshierarchie (Standard von links nach rechts)
Für Dateien, die beispielsweise im Unterordner /wDeutsch/produkte/ liegen, sieht die Titelangabe folgendermaßen aus:
<title>Musterfirma - require_once ($_SERVER["DOCUMENT_ROOT"].'/wDeutsch/wLayout/structure/showNavPath.php');Â echo showNavPath('../standard.wNavigation.xml'); </title>
Mit dem Weblication-Werkzeug »Suchen und Ersetzen« können auch schon bestehende Projekte relativ schnell angepasst werden.
Suchmaschinenfreundliche URLs mit NavAnchor
Juni 8, 2006 on 9:48 am | In Mod-Rewrite | No CommentsIm Entwicklerbereich von Weblication (http://dev.weblication.de) gibt es in der Knowledgebase einen Artikel, der das Umschreiben der URLs in suchmaschinenfreundliche URLs beschreibt: [zum Arikel]
In diesem Artikel werden zwei Varianten beschrieben (navid und navanchor) bei dem navid-Parameter ergeben sich jedoch folgende Probleme:
Wenn man bei der Umsetzung mit dem “navid”-Parameter die Navigation verändert (durch einfügen oder entfernen von Navigationspunkten) stimmen die bei den Suchmaschinen bekannten URLs nicht mehr 100%ig (Aus www.firma.de/wDeutsch/kontakt/index_8.php wird z.B. www.firma.de/wDeutsch/kontakt/index_7.php). Die Auswirkung ist zwar nicht sehr dramatisch, da die Seite nach wie vor über den alten Link erreichbar ist, jedoch wird der falsche Navigationsparameter übergeben, und somit der falsche Navigationspunkt angezeigt. Weiterer Effekt wäre, dass nach und nach die Suchmaschinen immer mehr URLs finden, diese zeigen jedoch alle wieder auf die gleiche Seite.
Der Navanchor Parameter ist ein fixer Navigations-Parameter, der sich für den einzelnen Navigationspunkt nicht mehr verändert, daher ist diese Variante zu bevorzugen.
Wie man für die Navigation die eindeutige ID (navanchor) benutzen kann ist in der Knowledgebase ausführlich erklärt. [zum Arikel]
Nun hat man suchmaschinenfreundliche URLs … wenigsten solange man keine Datenbank oder CSV-basierten Weblics einsetzt, die mit GET-Parametern arbeiten (wie z.B. Pressemeldungen, FAQ, Glossar, … etc.). Hierfür werde ich hier nach und nach Codebeispiele für die Erweiterung der .htaccess Datei und der footer.php zur Verfügung stellen.
Mehrsprachige Projekte suchmaschinenfreundlich umgesetzt.
Juni 6, 2006 on 3:08 pm | In Allgemein, Codebeispiele | No CommentsUm große mehrsprachige Projekte suchmaschinenfreundlich umzusetzen, so dass für alle Sprachen möglichst gute Ergebnisse erziehlt werden können, sollten die einzelnen Sprachen auf separate Domains verteilt werden. Diese haben dann am besten noch die passende Top-Level-Domain.
Deutsch: www.firma.de
Englisch: www.firma.com
Französisch: www.firma.fr …. usw.
Unter der deutschen Domain dürfen dann auch nur die deutschen Inhalte erreichbar sein. Querverlinkungen zu anderen Sprachen müssen dann auch auf die zugehörige Domain verweisen.
Bei der “Trennung” von vorhandenen Projekten auf mehrere Domains sollte zusätzlich eine 301-Weiterleitung auf die zugehörige Domain in jede Seite eingebaut werden (über die “suchen und ersetzen” Funktion). Diese Weiterleitung darf natürlich nicht greifen, wenn der Pflegebenutzer angemeldet ist, da es sonst probleme mit der Domaingebundenen Lizenzabfrage gibt.
Codebeispiel:
require_once ($_SERVER["DOCUMENT_ROOT"]."/weblication/lib/WAPI/WAPI.inc"); if (!(wIsInGroup("Standardgruppe") or wIsAdmin())){ $URLFROM = $_SERVER["HTTP_HOST"]; if(!($URLFROM == <a href="http://www.firma.com/">www.firma.com</a>)){ $location = "Location: http://www.firma.com".$_SERVER["PHP_SELF"]; header("HTTP/1.1 301 Moved Permanently"); header($location); header("Connection: close"); } } <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- Weblication® CMS Strukturdesign Version 4.0.13 --> <!-- erstellt durch Scholl Communications AG, 77694 Kehl, <a href="http://www.scholl.de/">www.scholl.de</a> --> <!-- erstellt mit Weblication® Content Management System, <a href="http://www.weblication.de/">www.weblication.de</a> --> <html> ...
Damit bei dem Aufruf einer Domain dann auch die entsprechend passende Sprache erscheint müssen wir die index.php im Document-Root noch anpassen. Das Codebeispiel bezieht sich auf eine zweisprachige Seite, über weitere IF-Schleifen kann man die Anzahl der Domains bzw. der Sprachen beliebig erweitern.
$URLFROM = $_SERVER["HTTP_HOST"]; if(($URLFROM == "www.firma.com")||($URLFROM == "firma.com")){ Â $_SERVER["SCRIPT_FILENAME"] = $_SERVER["DOCUMENT_ROOT"]."/wEnglish/index.php"; Â $_SERVER["SCRIPT_NAME"]Â Â Â Â = "/wEnglish/index.php"; Â $_SERVER["PATH_INFO"]Â Â Â Â Â Â = "/wEnglish/index.php"; Â $_SERVER["REQUEST_URI"]Â Â Â Â = "/wEnglish/index.php?".$_SERVER["QUERY_STRING"]; Â include($_SERVER["DOCUMENT_ROOT"]."/wEnglish/index.php"); } else { Â $_SERVER["SCRIPT_FILENAME"] = $_SERVER["DOCUMENT_ROOT"]."/wDeutsch/index.php"; Â $_SERVER["SCRIPT_NAME"]Â Â Â Â = "/wDeutsch/index.php"; Â $_SERVER["PATH_INFO"]Â Â Â Â Â Â = "/wDeutsch/index.php"; Â $_SERVER["REQUEST_URI"]Â Â Â Â = "/wDeutsch/index.php?".$_SERVER["QUERY_STRING"]; Â include($_SERVER["DOCUMENT_ROOT"]."/wDeutsch/index.php"); }
Wenn das Projekt technisch gesehen nun getrennt ist, müssen auch alle Sprachen-Domains einzeln bekannt gemacht werden. Somit vergrößert sich hier zwar der Aufwand, aber das Ergebniss ist dann auch um so erfolgreicher.
Google Sitemap unter Weblication CMS
Mai 31, 2006 on 8:05 pm | In Codebeispiele | 1 CommentGoogle bietet Webmastern mit Google Sitemaps die Möglichkeit die Sitemap des eigenen Projektes bei Google zu “melden”. Zitat: “Durch eine Sitemap findet Google einfach mehr Informationen, die mit den üblichen Methoden alleine möglicherweise nicht gefunden werden” (http://www.google.com/webmasters/sitemaps/docs/de/about.html).
Da es sich bei Weblication CMS um ein dateibasiertes System handelt, und die Navigationen in XML-Dateien abgelegt sind (die nicht dem Google-Sitemap-Format entsprechen), ist es nicht so einfach eine Google-Sitemap zu generieren, die immer dem aktuellen Stand der Navigation entspricht. Vor allem bei großen Projekten die sich ständig verändern ist es aber wichtig, dass die Sitemap auch aktuell ist.
Die Google Sitemap muss im XML Format angelegt sein (http://www.google.com/webmasters/sitemaps/docs/de/protocol.html). Glücklicherweise verzichtet Google darauf, dass die Dateiendung XML sein muss. Daher können wir über die Weblication eigenen Funktionen mit dem passenden Navigations-Template eine sitemap.php erzeugen, die den Anforderungen von Google entspricht. Diese Sitemap kann dann später bei Google eingereicht werden (https://www.google.com/webmasters/sitemaps).
sitemap.php (Die Sitemap-Datei)
require_once ($_SERVER["DOCUMENT_ROOT"]."/weblication/lib/WAPI/WAPI.inc"); print '<?xml version="1.0" encoding="UTF-8" ?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instande" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">'; wShowNavigation("/wDeutsch/standard.wNavigation.xml", "sitemap_tpl.php", "a", 0); wShowNavigation("/wEnglisch/standard.wNavigation.xml", "sitemap_tpl.php", "a", 0); print'</urlset>';
sitemap_tpl.php (Das Navigationstemplate)
require_once ($_SERVER["DOCUMENT_ROOT"]."/weblication/lib/WFRAMEWORK/wFile.php" ); <!--NAVIGATION--> <!--NAVLEVEL1--><url> <loc>print $_SERVER['HTTP_HOST']; <!--link--></loc> <lastmod>$path = $_SERVER["DOCUMENT_ROOT"]."<!--link-->"; $fileObject = new wFile($path); $timestamp = $fileObject->wGetLastModification(); print date("Y-m-d",$timestamp); </lastmod> <changefreq>weekly</changefreq> <priority>1.0</priority></url> <!--CHILDNAVPOINT--><!--SIBLINGNAVPOINT--><!--NAVLEVEL1--> <!--NAVLEVEL2--> <url> <loc>print $_SERVER['HTTP_HOST']; <!--link--></loc> <lastmod>$path = $_SERVER["DOCUMENT_ROOT"]."<!--link-->"; $fileObject = new wFile($path); $timestamp = $fileObject->wGetLastModification(); print date("Y-m-d",$timestamp); </lastmod> <changefreq>weekly</changefreq> <priority>0.9</priority> </url> <!--CHILDNAVPOINT--><!--SIBLINGNAVPOINT--><!--NAVLEVEL2--> <!--NAVLEVEL3--> <url> <loc>print $_SERVER['HTTP_HOST']; <!--link--></loc> <lastmod>$path = $_SERVER["DOCUMENT_ROOT"]."<!--link-->"; $fileObject = new wFile($path); $timestamp = $fileObject->wGetLastModification(); print date("Y-m-d",$timestamp); </lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> <!--CHILDNAVPOINT--><!--SIBLINGNAVPOINT--><!--NAVLEVEL3--> <!--NAVLEVEL4--> <url> <loc>print $_SERVER['HTTP_HOST']; <!--link--></loc> <lastmod>$path = $_SERVER["DOCUMENT_ROOT"]."<!--link-->"; $fileObject = new wFile($path); $timestamp = $fileObject->wGetLastModification(); print date("Y-m-d",$timestamp); </lastmod> <changefreq>weekly</changefreq> <priority>0.7</priority> </url> <!--CHILDNAVPOINT--><!--SIBLINGNAVPOINT--><!--NAVLEVEL4-->
Diese beiden Dateien am besten ins Document-Root legen (Hauptverzeichnis) und die Navigationsbezeichnung(en) ggf. anpassen. Anschließend bei Google einreichen und noch die von Google gewünschte leere Datei anlegen. Später dann noch prüfen, ob Google die Sitemap erfolgreich erfassen konnte.
^Top^