Magento: Funktion zur Erzeugung der „markup for multilingual content“-Link-Tags

22. Januar 2013 at 17:53

Die folgende Funktion erzeugt euch für die einzelnen Stores bei Mehrsprachigkeit dieser ein Array mit den Markup-Links für Multilingual content:

public function countryStoresAlternateLinks()
{
/*      e.g.
<link rel="alternate" hreflang="es" href="http://www.example.com/" />
<link rel="alternate" hreflang="es-ES" href="http://es-es.example.com/" />
<link rel="alternate" hreflang="es-MX" href="http://es-mx.example.com/" />
<link rel="alternate" hreflang="en" href="http://en.example.com/" />
*/
$stores = Mage::app()->getStores(false);
if (!$stores) {
return false;
}
$countryAlternateLinks = '';
foreach($stores as $store) {
$countryAlternateLinks[] = '<link rel="alternate" hreflang="' . substr(Mage::getStoreConfig('general/locale/code', $store->getId()), 0, 2) . (Mage::getStoreConfig('general/country/default', $store->getId()) != '' ?  "-" . Mage::getStoreConfig('general/country/default', $store->getId()) : '') .  '" href="' . $store->getBaseUrl() . '" />' . "\n";
}
return $countryAlternateLinks;
}

Die erzeugte Liste könnt ihr dann entsprechend im Template verarbeiten/ausgeben.

Idealerweise solltet ihr die Funktion in eine erweiterte Klasse der Mage_Page_Block_Html_Head packen.

Magento: Standard Weiterleitung mit 302 ändern zu einer 301 Weiterleitung (SEO)

17. Januar 2013 at 10:30

Magento leitet interne Links per 302-Status-Code weiter. Das ist in Bezug auf Suchmaschinenoptimierung nicht gerade optimal, besser wäre eine 301-Weiterleitung.

Um das zu ändern sollte beim Aufruf der Funktion „_redirect“ jeweils als zweiten Parameter der korrekte Status-code „301“ mit gegeben werden, da ansonsten der Default-Parameter „302“ verwendet wird.

Siehe: /app/code/core/Mage/Core/Controller/Response/Http.php :

/**
* Additionally check for session messages in several domains case
*
* @param string $url
* @param int $code
* @return Mage_Core_Controller_Response_Http
*/
public function setRedirect($url, $code = 302)
{
/**
* Use single transport object instance
*/
if (self::$_transportObject === null) {
self::$_transportObject = new Varien_Object;
}
self::$_transportObject->setUrl($url);
self::$_transportObject->setCode($code);
Mage::dispatchEvent('controller_response_redirect',
array('response' => $this, 'transport' => self::$_transportObject));
return parent::setRedirect(self::$_transportObject->getUrl(), self::$_transportObject->getCode());
}

Um das über ein Magento-Event zu lösen, geht wie folgt vor:

Erstellt ein neues Module und erweitert die config.xml mit folgendem xml-snippet, z.B. in der /app/code/local/Neuesmodul/Cms/etc/config.xml

<global>
<events>
<cms_controller_router_match_before>
<observers>
<Neuesmodul_Cms_observer_cmsControllerRouterMatchBefore>
<type>singleton</type>
<class>neuesmodul_cms/observer</class>
<method>
cmsControllerRouterMatchBefore
</method>
</Neuesmodul_Cms_observer_cmsControllerRouterMatchBefore>
</observers>
</cms_controller_router_match_before>
</events>
</global>

in /app/code/local/Neuesmodul/Cms/Model/Observer.php fügt ihr die folgende Funktion  ein:

/*
* set 301-Http-Response-Code for redirection
*/
public function cmsControllerRouterMatchBefore(Varien_Event_Observer $observer)
{
$condition = $observer->getEvent()->getCondition();
if ($condition->getRedirectUrl()) {
Mage::app()->getFrontController()->getResponse()
->setRedirect($condition->getRedirectUrl(), 301)
->sendResponse()
->setDispatched(true);
}
}

Alternativ-Funktion

/*
 * set 301-Http-Response-Code for redirection
 */
 public function cmsControllerRouterMatchBefore(Varien_Event_Observer $observer)
 {
 $condition = $observer->getEvent()->getCondition();
if ($condition->getIdentifier()) {
 Mage::app()->getFrontController()->getResponse()
 ->setRedirect('/', 301)
 ->sendResponse()
 ->setDispatched(true);
die();
 }
 }

Die Magento SEO Checkliste – Diese Punkte sollten vor dem Go-Live geprüft werden

16. Januar 2013 at 15:23

Magento bietet eine Reihe an Möglichkeiten den Webshop für Suchmaschinen zu optimieren (kurZ: SEO). Die folgende Checkliste sollte vor der Go-Live Schaltung abgearbeitet werden:

SEO features Description
General
1. Store name Don’t forget to enter your store name. Store name is used in different parts of Magento
System -> Configuration -> General -> Store information -> Store name
2. Home page title and meta data Don’t forget to enter “Page title” and “Meta data” for your CMS pages, including Home page
CMS -> Pages -> Home
3. Logo image Alt description Alt description of the store image logo
System -> Configuration -> Design -> Header -> Logo Image Alt
4. SEO Friendly URLs (SEF URLs) SEO Friendly URLs is one of the most important features of every eCommerce store, don’t forget to enable and test it
System -> Configuration -> Web -> Search Engines Optimization -> Use Web Server Rewrites -> “Yes”
Base URL
5. Unsecure and secure base URLs Enter HTTP and HTTPS path to your store, e.g. http://www.example.com/store/ or https://www.example.com/store/
System -> Configuration -> Web -> Unsecure -> Base URL
System -> Configuration -> Web -> Secure -> Base URL
6. Auto-redirect to Base URL Use only one WWW or non-WWW URL for your store. I.e. redirect from http://example.com/store/ to http://www.example.com/store/
System -> Configuration -> Web -> URL options -> Auto-redirect to Base URL -> “301 redirect (Moved permanently)”
Products and categories
7. Products meta data and URL key Your products should have SEO friendly URL keys and correct meta data values
Catalog -> Manage Products -> [Product] -> General -> URL Key
Catalog -> Manage Products -> [Product] -> Meta data
8. Categories meta data and page title Enter URL Key, page title, Meta information for each category
Catalog -> Manage Categories -> [Category]
9. Canonical link for categories and products Enter URL Key, page title, Meta information for each category
System -> Catalog -> Catalog -> Search Engine Optimizations -> Use Canonical Link Meta Tag For Categories
System -> Catalog -> Catalog -> Search Engine Optimizations -> Use Canonical Link Meta Tag For Products
10. Structure of product URLs Preferred structure of product URLs
System -> Catalog -> Search Engine Optimizations -> Use Categories Path for Product URLs -> “Yes”
Sitemap
11. Google sitemap Google sitemap configuration
System -> Google Sitemap
12. Magento sitemap Magento sitemap configuration settings
System -> Catalog -> Sitemap -> Use Tree Like Category Sitemap -> “Yes”
System -> Catalog -> Sitemap -> Search Engine Optimizations -> Autogenerated Site Map -> Enable
Advanced
13. Remove SID from Magento URLs Be careful, this feature allows customers to stay logged in when switching between different multi-stores
System -> Configuration -> Web -> Session Validation Settings -> Use SID on Frontend -> No
14. Permanent redirect rules Permanent redirect rules for renamed products or categories
System -> Catalog -> Search Engine Optimizations -> Create Permanent Redirect for URLs if URL Key Changed -> “Yes”
Default values
15. Default SEO values Default values for title, Meta tags and robots directives
System -> Configuration -> Design -> HTML head -> Default Title
System -> Configuration -> Design -> HTML head -> Default Description
System -> Configuration -> Design -> HTML head -> Default Keywords
System -> Configuration -> Design -> HTML head -> Default Robots -> “INDEX, FOLLOW”
16. Default title separator Default page title separator on storefront
System -> Catalog -> Search Engine Optimizations -> Page Title Separator -> “-”
17. Default product URL suffix Default product URL suffix for all pages
System -> Catalog -> Search Engine Optimizations -> Product URL Suffix -> “.html”
System -> Catalog -> Search Engine Optimizations -> Category URL Suffix -> “.html”

Magento: Wie finde ich heraus ob ich auf der Startseite bin? – getIsHomePage

15. Januar 2013 at 15:12

Ihr möchtet an beliebiger Stelle in Magento im Quellcode prüfen ob ihr auf der Startseite seit oder nicht?

Die Lösung

$is_homepage = Mage::getBlockSingleton('page/html_header')->getIsHomePage();

in der header.phtml :

<?php
if($this->getIsHomePage()) {
echo 'You are in Homepage!';
} else {
echo 'You are NOT in Homepage!';
}
?>

an anderer Stelle:

<?php
$is_homepage = Mage::getBlockSingleton('page/html_header')->getIsHomePage();
if($is_homepage)
{
echo "You are on Homepage!";
} else {
echo "You are NOT on Homepage!";
}
?>
oder
<?php
$routeName = Mage::app()->getRequest()->getRouteName();
$identifier = Mage::getSingleton('cms/page')->getIdentifier();
if($routeName == 'cms' && $identifier == 'home') {
echo 'You are in Homepage!';
} else {
echo 'You are NOT in Homepage!';
}
?>

Nützliche SEO- und Web-Tools – Ein Überblick

11. Januar 2013 at 15:31

SEO Tool Sammlung

Diverse SEO Tools – linkvendor.com

Social Media Image Maker

Ein nützliches tool um für diverse Social-Media Bilder anzupassen.

www.autreplanete.com/ap-social-media-image-maker

Tool zum testen der Keyworddichte

www.werbeheini.de/seo-keyword-dichte.php

w3c validator

Der w3c validator zum überprüfen einer Webseite auf validen HTML-Code nach W3C-Standard.validator.w3.org

w3c link checker

validator.w3.org/checklink

 

Free Monitor for Google

Ein kostenlose Tool um für Ihre Webseiten die aktuelle Platzierung in der Suchmaschine Google anhand definierter Keywords heraus zu finden.Download Free Monitor for Google

301 redirect checker

Überprüft ob eine Seite per 301 weiter geleitet wird.

www.redirectchecker.com

www.ragepank.com/redirect-check

 Screaming Frog SEO Spider Tool

Der Screaming Frog ist ein SEO Spider, folglich macht er im Prinzip genau das, was sämtliche Suchmaschinen-Bots machen: Er crawlt die Links einer Domain und sammelt dabei SEO-relevante Daten.

Diese Daten lassen sich dann sortieren, filtern und Excel-freundlich exportieren. Als Desktopanwendung ist der Screaming Frog sowohl für Windows- als auch für Mac-User verfügbar. In der kostenlosen Version ist der Crawl-Umfang auf maximal 500 URLs begrenzt und auch die Einstellungsmöglichkeiten sind beschränkt. Nichtsdestotrotz sollte die kostenlose Variante für die Analyse kleinerer Projekte vollkommen ausreichend sein. Wem das doch nicht reicht, der kann für 99 Britische Pfund eine Jahreslizenz für die Vollversion erstehen.

www.screamingfrog.co.uk/seo-spider/

Magento: Fehler beim Anlegen der sitemap.xml – die Lösung zum Problem

11. Januar 2013 at 15:07

Das Problem

Beim anlegen einer sitemap.xml im Magento-Admin-Backend erhaltet ihr, ab dem Moment wo ihr von dem Namen „sitemap.xml“ abweicht ggf. eine Fehlermeldung wie z.B. die folgende „Der Pfad „/var/sitemaps/sitemap-de.xml“ ist nicht verfügbar und kann nicht verwendet werden.“ und das obwohl, der Pfad /var/sitemaps/ existiert und auch vom Webserver beschreibbar ist.

Ursache? Ggf. Magento-Bug …

Die Lösung

Legt pro sitemap ein Unterordner an, z.B. „/var/sitemaps/de/“, dort packt ihr jeweils die „sitemap.xml“ rein (muss immer so heißen) und schon funktionierts.

Magento: Admin_User Passwort per SQL in der Datenbank ändern

10. Januar 2013 at 11:19

Mit dem folgenden SQL-Update-Script ist es möglich das Passwort eines Admin_Users direkt in der Datenbank zu ändern.

Dabei ist zu beachten, dass der String „qX“ nicht geändert werden kann, den String „password“ mit dem neuen Passwort ersetzen.

UPDATE admin_user SET password=CONCAT(MD5('qXpassword'), ':qX') WHERE username='admin';

 

 

Apache: „client denied by server configuration“ Fehler beheben

9. Januar 2013 at 14:00

Ihr habt ein neuen Vhost eingerichtet und erhaltet beim Aufruf der Seite nur ein „client denied by server configuration“ in den Server-Logs des Apache?

Lösung:

Höhst wahrscheinlich habt ihr Unterordner angelegt, deshalb fügt folgenden Abschnitt mit in die Vhost-config ein:

<Directory "/srv/htdocs/path">
Options -Indexes FollowSymLinks
AllowOverride
#AuthConfig FileInfo
Order allow,deny
Allow from all
</Directory>

Wenn Sie keinen Zugriff auf die httpd.conf haben (bei nahezu allen Shared-Hosting Anbietern), wenden Sie sich bitte an Ihren Provider und ersuchen Sie darum, die Direktive „AllowOverride“ entsprechend zu setzen (damit die FileInfo durch die .htaccess überschrieben werden darf).

Wichtig ist, dass AllowOverride im korrekten -Container gesetzt wird (hiervon gibt es mehrere). Setzen Sie AllowOverride in jenem Container, der Ihr DocumentRoot enthält (z.B.: ) jedoch nicht im Container!

Mysql: ibdata zu groß – Daten aufteilen mit „innodb_file_per_table“

8. Januar 2013 at 11:17

Per Standard Konfiguration des mySql-Servers, werden alle Daten aus allen Datenbanken, in eine einzige Datei Namens „ibdata“ im mysql-data-ordner geschrieben. Diese Datei wächst kontinuierlich, auch beim löschen von Datenbanken bleibt die Größe erhalten (schrumpfen nicht möglich).

In der Praxis ist das nicht gerade optimal, lösen könnt ihr dieses Problem durch hinzufügen des Eintrages „innodb_file_per_table“ in der my.ini bzw. my.cnf im [mysqld]-Abschnitt der Konfigurations-Datei. Danach werden (Server-Neustart) jeweils pro Datenbank entsprechende ibdata-files angelegt, diese können dann auch beim löschen einer Datenbank mit gelöscht werden.