SEO оптимизиране на osCommerce

Тази статия е за SEO оптимизиране на онлайн магазин от вида osCommerce.
На първо място, ако сега избираш софтуер за онлайн магазин или вече си избрал, но още не си го пуснал онлайн е по-добре да избереш нещо различно от osCommerce. Причините са няколко: няма стандартни SEO възможности, сериозни дупки в сигурността позволяващи компрометиране на сайта, остаряла визия и др.
Тази статия приема, че ти се налага да ползваш osCommerce и вече имаш инсталирана версия osCommerce Online Merchant v2.2 RC2a, в главната уеб директория на стандартен хостинг с активиран mod_rewrite. Това е последната стабилна версия в момента, но ще сработи и с по-стари версии на софтуера.
Преди да правиш промени те съветвам да направиш пълно резервно копие на всички файлове на сайта.

Първото, което трябва да направиш е съкращаване на URL адреси. Има готови модули за това, но за съжаление не работят с адреси на кирилица.

I. Човешки интернет адреси (SEO friendly URL)

Следния код модифицира osCommerce така, че интернет адресите на категориите да съдържат имената на категориите, а продуктовите страници да съдържат името на продукта. Работещ пример може да видиш в този сайт за био козметика. Например вместо да се ползва адрес http://organic-bg.com/?cPath=2 за достъп до втората категория, адреса е http://organic-bg.com/Проблемна-кожа-c2.

Промяната е бърза, лесна и безопасна. Извършва се в 3 стъпки:

1. Пренасочване.

Отвори файла .htaccess. Потърси редове като

RewriteEngine On
RewriteBase /

Ако нямаш такива редове ги добави и след тях добави следните редове:

RewriteRule [^/]+-c([09]+)/[^/]+-s([09]+)/[^/]+-p([09]+)/? /product_info.php?cPath=$1_$2&products_id=$3 [NC,L,QSA]
RewriteRule [^/]+-c([09]+)/[^/]+-p([09]+)/? /product_info.php?cPath=$1&products_id=$2 [NC,L,QSA]
RewriteRule [^/]+-c([09]+)/[^/]+-s([09]+)/? /?cPath=$1_$2 [NC,L,QSA]
RewriteRule [^/]+-p([09]+)/? /product_info.php?products_id=$1 [NC,L,QSA]
RewriteRule [^/]+-c([09]+)/?$ /?cPath=$1 [NC,L,QSA]

Запиши файла и отвори сайта през браузър. Ако получиш грешка 500 Internal Server Error първо провери правата на файла .htaccess дали са 755. Презареди страницата, ако грешката стои вероятно нямаш активиран mod_rewrite на уеб сървъра. Свържи се с твоя хостинг доставчик, за да ти активира този модул. Той е длъжен да го направи, защото това е стандартна опция.

2. Функции.

Отвори файла includes/functions/html_output.php
В края на файла преди реда ?> добави следните две функции:

// ganbox.com : SEO friendly URLs
// Човешки интернет адреси
function URL_rewrite($url) {
global $languages_id;
$matches = array();
if(preg_match(“/cPath=([0-9]*)_?([0-9]+)?(&products_id=)?([0-9]+)?(.*)?/”, $url, $matches)>0 && preg_match(“/action=/”, $url)==0) {
// намира име на категория
if(isset($matches[1])) {
$cat_id = $matches[1];
$cat_query = tep_db_query(“select categories_id, categories_name from “ . TABLE_CATEGORIES_DESCRIPTION . ” where categories_id = ‘” . (int)$cat_id  . “‘ and language_id = ‘” . (int)$languages_id . “‘ limit 1”);
$cat_string = tep_db_fetch_array($cat_query);
$cat_string = URL_safe($cat_string[‘categories_name’]);
}
// намира име на подкатегория
if(isset($matches[2])) {
$subcat_id = $matches[2];
$cat_query = tep_db_query(“select categories_id, categories_name from “ . TABLE_CATEGORIES_DESCRIPTION . ” where categories_id = ‘” . (int)$subcat_id . “‘ and language_id = ‘” . (int)$languages_id . “‘  limit 1”);
$subcat_string = tep_db_fetch_array($cat_query);
$subcat_string = URL_safe($subcat_string[‘categories_name’]);
}
// намира име на продукт
if(isset($matches[4])) {
$prod_id = $matches[4];
$prod_query = tep_db_query(“select products_name, products_id from “ . TABLE_PRODUCTS_DESCRIPTION . ” where products_id = ‘” . (int)$prod_id . “‘ and language_id = ‘” . (int)$languages_id . “‘  limit 1”);
$prod_string = tep_db_fetch_array($prod_query);
$prod_string = URL_safe($prod_string[‘products_name’]);
}
// допълнителни данни
if(isset($matches[5])) {
$extras = $matches[5];
// изтрива излишните знаци &
$extras = substr($extras, 1);
}// почистване на index.php от URL
if(preg_match(“/(.*)index\.php/”, $url)>0) {
$url = preg_replace(“/index\.php.*/”, “”, $url);
}

// почистване на product_info.php от URL
if(preg_match(“/(.*)product_info\.php/”, $url)>0) {
$url = preg_replace(“/product_info\.php.*/”, “”, $url);
}

// сглобява ново URL
if(isset($cat_string) && $cat_string != “”) {
$url .= $cat_string.“-c”.$cat_id;

// добавя низ за подкатегория
if(isset($subcat_string) && $subcat_string != “”) {
$url .= “/”.$subcat_string.“-s”.$subcat_id;
}

// добавя име на продукт
if(isset($prod_string) && $prod_string != “”) {
$url .= “/”.$prod_string.“-p”.$prod_id;
}

// добавя допълнителни данни
if(isset($extras) && $extras != “”) {
$url .= “/?”.$extras;
}
}
} else if(preg_match(“/products_id=([0-9]+)(.*)?/”, $url, $matches)>0 && preg_match(“/action=/”, $url)==0) {
// намира име на продукт
if(isset($matches[1])) {
$prod_id = $matches[1];
$prod_query = tep_db_query(“select products_name, products_id from “ . TABLE_PRODUCTS_DESCRIPTION . ” where products_id = ‘” . (int)$prod_id . “‘ and language_id = ‘” . (int)$languages_id . “‘ limit 1”);
$prod_string = tep_db_fetch_array($prod_query);
$prod_string = URL_safe($prod_string[‘products_name’]);
}
// допълнителни данни
if(isset($matches[2])) {
$extras = $matches[2];
// изтрива излишните знаци &
$extras = substr($extras, 1);
}

// почистване на product_info.php от URL
if(preg_match(“/(.*)product_info\.php/”, $url)>0) {
$url = preg_replace(“/product_info\.php.*/”, “”, $url);
}

// сглобява ново URL
if(isset($prod_string) && $prod_string != “”) {
$url .= $prod_string.“-p”.$prod_id;
}

// добавя допълнителни данни
if(isset($extras) && $extras != “”) {
$url .= “/?”.$extras;
}
}

return $url;
}

// ganbox.com
// Имената на категории и продукти се почистват от неподходящи за URL знаци
function URL_safe($str) {
$str = strtolower($str);
$str = preg_replace(“/[^АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюяa-z0-9-]+/i”,“-“,$str);
return $str;
}

Запиши и качи файла. Дотук все още нищо няма да се промени по твоя интернет магазин.

3. Активиране

Във същия файл includes/functions/html_output.php намери function tep_href_link. В края на тази функция са редовете:

return $link;
}

Преди тези два реда добави реда:

// ganbox.com: SEO mod
$link = URL_rewrite($link);

Запиши и качи файла. Сега презареди сайта и всичко трябва да работи.
Ако нещо се обърка, може бързо да спреш промените като коментираш последно добавения ред ето така:

//$link = URL_rewrite($link);

Заб. Ако твоят онлайн магазин е в поддиректория като domain.com/shop, тогава кодът ще бъде малко по-различен. Свържи се със SEO експерт за повече информация.
Заб. Така написания код работи с всички езикови версии на сайта.
Заб. Ако при първоначалното влизане в сайта, при преминаване на мишката над линковете в менюто виждаш в края на интернет адресите променлива подобна на osCsid=a835b29ac42d801f56a3c75e1560bd6e е много добра идея да напавиш следното: влез в админ панела на сайта избери Настройки / Sessions / „Force Cookie Use“ отдясно избери True и натисни бутона [Обнови]. По същия начин включи опцията „Prevent Spider Sessions“.

II. Пренасочване на стари URL адреси

Пренасочване на интернет адресите на продуктовите страници и страниците на категориите.
Тази стъпка може да се пропусне, ако твоя интернет магазин е съвсем нов и все още не е посетен от ботовете на търсачките. Дали това е така може да научиш като в Google потърсиш за site:domain.com, като domain.com се замества с адреса на твоя сайт. Ако вече има индексирани продуктови страници е силно препоръчително да кажеш на търсачките, че си променил URL адресите. Ако не го направиш, рискуваш сайта да получи наказание за дублирано съдържание, защото всяка страница ще се достъпва с два различни адреса.
Един начин да направиш това е като в .htaccess за всяка страница зададеш пренасочване от тип 301. Ако имаш малко продукти това не е проблем и дори е за предпочитане. Но ако имаш десетки и стотици продукти? Тогава трябва да бъдеш умен и да измислиш по-мързеливо решение ;)

Виртуален редирект

Автоматично пренасочва всички стари адреси, към новите описателни адреси. Например при написване на адрес http://organic-bg.com/?cPath=2 се пренасочва към адрес http://organic-bg.com/Проблемна-кожа-c2. Пренасочването е от тип 301, което паказва на ботовете на търсачките, че адреса е трайно променен и това е единственото правилно пренасочване.
За да сработи този хак се нуждае от двете функции от предишната стъпка.
Отвори файла includes/application_top.php
В края на файла преди реда съдържащ ?> добави кода:

// ganbox.com : virtual permanent redirect
// пренасочва стари адреси на продуктови страници и страници на категории към новите адреси
if(isset($_GET[‘cPath’]) || isset($_GET[‘products_id’])){
$old_url = $_SERVER[‘REQUEST_URI’];
$new_url = URL_rewrite($old_url);
if($new_url && $new_url!=$old_url){
$new_url = preg_replace(‘#\?cPath=([0-9]*)_?([0-9]+)?#’, , $new_url);
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: $new_url);
exit();
}
}

Запиши и качи файла. От този момент бот или човек запаметил, или букмаркнал стар URL адрес ще бъде пренасочван към новия адрес. Nice аа? :)

III. Мета тагове

Промяна на мета тагове: title и description на продуктовите страници.
Има готов модул за промяна на мета таговете. Казва се Header Tags SEO и дава възможност за промяна на мета таговете на страница от админ панела на магазина. Проблемът е, че инсталирането е доста сложно, защото се променя базата данни и доста файлове.
Моето решение по въпроса е значително по-лесно за инсталиране и сравнително лесно за поддръжка.

Как работи?

Тагът title и мета тага description автоматично се попълват със заглавието на продукта, като го взема от базата данни. В директория meta, поставена в главната уеб директория, се намират текстови файлове с описания на продуктите. За всеки продукт може да се създаде файл с разширение .txt като на първия ред се пише описание за description тага, на втория ред се пише текста за title тага и на третия ред може да се напишат ключови думи. Файлът на продукт започва с буквата p и съдържа номер на продукта. Например p74.txt е името на файла с описания на продукт с номер 74. Най-хубавото е, че файловете с описания не са задължителни.

SEO мета тагове

Отвори файла product_info.php
Замести реда
<title><?php echo TITLE; ?></title>
с редовете
<title><?php echo $meta_title; ?></title>
<meta name=“description“ content=“<?php echo $meta_desc?>“ />
<meta name=“keywords“ content=“<?php echo $meta_keys?>“ />

След реда
require(‘includes/application_top.php’);
добави кода:

// ganbox.com : SEO meta tags
$meta_title = TITLE; // стойност по подразбиране
$meta_desc = $meta_keys = ;
$prod_id = isset($HTTP_GET_VARS[‘products_id’]) ? (int)$HTTP_GET_VARS[‘products_id’] : 0;
if($prod_id &gt; 0) {
// намира име на продукт
$prod_query = tep_db_query(“select products_name, products_id from “ . TABLE_PRODUCTS_DESCRIPTION . ” where products_id = ‘” . (int)$prod_id . “‘ and language_id = ‘” . (int)$languages_id . “‘ limit 1”);
$prod_string = tep_db_fetch_array($prod_query);
$prod_string = URL_safe($prod_string[‘products_name’]);
$meta_title = mb_substr($prod_string,0,90);
$meta_desc = $prod_string;
}
$desc_file = $_SERVER[‘DOCUMENT_ROOT’] . DIR_WS_CATALOG .‘meta/p’.$prod_id.‘.txt’;
if(file_exists($desc_file)){
$aLines = file($desc_file);
if(!empty($aLines[0])) $meta_desc = mb_substr(trim($aLines[0]),0,900); // description
if(!empty($aLines[1])) $meta_title = mb_substr(trim($aLines[1]),0,90); // title
if(!empty($aLines[2])) $meta_keys = mb_substr(trim($aLines[2]),0,900); // keywords
}

Сега остава да създадеш директория meta, да я качиш в главната уеб директория и за всеки продукт, който желаеш да качиш съответен файл с описания. Продуктите, които нямат файл с описания ще ползват въведеното заглавие при добавяне на продукт.
Заб. Ако получиш грешка заради функция mb_substr() това означава, че твоя хостинг не поддържа mb_string библиотеката (къде ги намирате такива измислени хостинги бе хора?). Свържи се с твоя хостинг доставчик и изискай поддръжка на mb_string. Друг вариант е да заместиш всички функции mb_substr със substr.

Всичко описано дотук е само много малка макар и важна част от SEO за osCommerce. Това е нещо като подготовка за SEO оптимизиране. Без тези промени твоят сайт няма големи шансове за добро класиране. Ако не можеш да се справиш с тези промени или искаш професионални SEO услуги, може да се свържеш с мен от страница Контакт.

Брой разглеждания на тази статия: 1339

HTML код на статия

Автор: gan


VN:F [1.9.18_1163]
Рейтинг: 6.0 от 6 звезди. (от 1 глас)
SEO оптимизиране на osCommerce, 6.0 out of 6 based on 1 rating

Коментарите тук са спрени