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

Публикувано на: 07.10.2010

Последна актуализация на:

Тази статия е за 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([0-9]+)/[^/]+-s([0-9]+)/[^/]+-p([0-9]+)/? /product_info.php?cPath=$1_$2&products_id=$3 [NC,L,QSA]
RewriteRule [^/]+-c([0-9]+)/[^/]+-p([0-9]+)/? /product_info.php?cPath=$1&products_id=$2 [NC,L,QSA]
RewriteRule [^/]+-c([0-9]+)/[^/]+-s([0-9]+)/? /?cPath=$1_$2 [NC,L,QSA]
RewriteRule [^/]+-p([0-9]+)/? /product_info.php?products_id=$1 [NC,L,QSA]
RewriteRule [^/]+-c([0-9]+)/?$ /?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;
}
} // else

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 and $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

Замести реда

с редовете



След реда
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 > 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 услуги, може да се свържеш с мен от страница Контакт.

Прочетена:16020
1 - лоша2 - слаба3 - средна4 - добра5 - отлична (3 гласа, оценка: 5,00 от 5. Моля изберете оценка!)
Loading...
Георги Стефанов
Георги Стефанов
Магистър по информатика, който се занимава с компютри от 1988 г., професионално с програмиране от 1998 г., а с уеб технологии от 2002 г. Има богат опит при оптимизиране на бизнес сайтове. Повече от 12 години развива успешно свои уеб проекти и работи с български и международни компании за постоянно подобряване на техните сайтове и увеличаване на онлайн продажбите. 

15 comments on “SEO оптимизиране на osCommerce”

  1. Здравейте пиша ви относо темата ви :
    http://ganbox.com/blog/seo-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B8%D1%80%D0%B0%D0%BD%D0%B5-%D0%BD%D0%B0-oscommerce/
    SEO оптимизиране на osCommerce

    аз ползвам за моя сайт Ultimate SEO URLs v2.2d
    който прави адресите с имена но на латинеца
    това добре ли е или трябва да го направя по вашия метод ?
    може да видите как изглеждат - sim.bg

    Въпрос който възникна току що - когато се копира адреса вижте какви допълнителни символи стават ...D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B.....
    това не е ли ако не вредно то поне неприятно

  2. Отговора и на двата въпроса се намира в статията Транслитерация в Google. Трябва да проверите дали заместващата таблица (тази която замества символите от кирилица със съответните на латиница) съвпада с показаната в статията. Попадал съм на софтуер, който не беше точен и не се справяше много добре. Трябва да се има предвид, че ако се промени транлиращата таблица ще се получи така, че ще се променят URL адресите на съществуващите продуктови страници и ще трябва задължително старите адреси да се пренасочат към новите.

  3. след като изпълня втора точка Функции и презаредя сайта ми отваря само бял фон. дали бъркам някъде или пропускам нещо?

  4. Да, имаше проблем. Софтуера на блога, който оцветява кода беше подменил символите по-голямо, по-малко и знака &. Сега кода е поправен и не трябва да има проблем.
    По принцип, когато видиш бяла страница това означава, че в php файла има синтактична грешка. Самата грешка не се показва от съображения за сигурност на уеб сървъра.
    За да видиш грешката прегледай файла error_log в главната уеб директория.

  5. Здравейте, пак съм аз 🙂 този път получих тази грешка като активирах кода. Може ли отново да помоля за помощ ?

    Not Found

    The requested URL /bossa-nova---робот-prime-8-gorrilla-p3802/ was not found on this server.

  6. Изглежда така все едно твоя .htaccess не сработва. Провери дали файла е в главната уеб директория и дали уеб сървъра е настроен така, че файла да се взема под внимание. Необходимо е в конфигурационния файл да има настройка AllowOverride All
    Също така този странин енкодинг на думата след nova: "робоÑ" може да прави проблем.
    Дай линк към сайта.

  7. Тези неща как могат да се интегрират във версия 2.3 на Oscommerce

  8. сега откривам че имам проблем. когато искам да видя коментарите ми излиза грешка "Moved permanently". защо става това ?

  9. Здравейте! При добавяне на кода за friendly URL, сайта и URL адресите са ОК! При премахването му с цел да се върне предишното положение на сайта обаче, най-отгоре на всяка страница перманентно се появява следното предупреждение: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at domain\includes\functions\html_output.php:1) in domain\includes\functions\sessions.php on line 97

    Моля за помощ, за което предварително благодаря!

  10. Добра практика е, като правите такива експерименти, предварително да си направите архивно копие на всеки файл, който ще се променя, за да може лесно да се върне предишното състояние. В случая грешката показва, че във файла domain\includes\functions\html_output.php на първия ред има знак за нов ред или интервал. Не трябва да има нищо преди знака

  11. Здравейте отново и благодаря за отговора! Реших проблема по доста странен начин, което ме навежда на мисълта за появил се дефект в самия файл. Извинявам се за погрешната асоциация на проблема с кода за SEO URL!

  12. Благодаря за полезната функционалност, предоставена в статията! Кода работи много добре. С цел усъвършенстването му, бих искал да ви информирам за проблем, който открих - на страницата с информация за моделите, не работят линокевете "коментари за продукта" и "изпрати на приятел.

  13. Видяхме примерния URL, който ни изпратихте. Да така е - не работят описаните линкове. Причината е, че при разработването на тази модификация сме тествали върху магазин, който няма такава функционалност.

  14. Здравейте, много благодаря за полезната статия. Много ме зарадва че е направена стъпка по стъпка. Аз ползвам oscommerce 2.3.3. Направих всичко от първа точка както е описано но нищо не стана, после се сетих че сайта е във поддиректория domain.bg/catalog Може ли да ми кажете как ще изглежда кода за friendly URL.
    Забравих да кажа че имам инсталирано SEO URLs от сайта на oscommerce, но то не работи със кирилица, и затова започнах да правя по Вашия метод. Но не съм го деинсталирал(SEO URLs). Ако трябва ще го разкарам за секунди.

споделиха
phone linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram