SEO URL´s para OsCommerce

Esta contribución de Chemo, http://www.oscommerce.com/community/contributions,2823 , es de las que más útiles he encontrado.
Modifica las direcciones web por defecto de OsCommerce por páginas terminadas en .html y con el nombre del producto, es decir, sustituye el
http://www.tudominio.com/product_info.php?products_id=207
por
http://www.tudominio.com/tijerasdepunta.html
Esto hace que tu tienda se indexe mejor en los buscadores.

Primero que nada descargamos la última versión de la contribución ,SEO URL´s y descomprimimos.

Luego tenemos que subir a nuestro servidor los archivos siguientes:
includes/classes/seo.class.php
y
admin/includes/reset_seo_cache.php

Editamos includes/application_top.php
Justo después de este código :
// include the language translations
require(DIR_WS_LANGUAGES . $language . '.php');

Añadimos:
// Ultimate SEO URLs v2.1
include_once(DIR_WS_CLASSES . 'seo.class.php');
if ( !is_object($seo_urls) ){
$seo_urls = new SEO_URL($languages_id);
}

Ahora editamos includes/functions/html_output.php
y reemplazamos el siguiente código :

////
// The HTML href link wrapper function
function tep_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true) {
global $request_type, $session_started, $SID;

if (!tep_not_null($page)) {
die('

Error!

Unable to determine the page link!

');
}

if ($connection == 'NONSSL') {
$link = HTTP_SERVER . DIR_WS_HTTP_CATALOG;
} elseif ($connection == 'SSL') {
if (ENABLE_SSL == true) {
$link = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG;
} else {
$link = HTTP_SERVER . DIR_WS_HTTP_CATALOG;
}
} else {
die('

Error!

Unable to determine connection method on a link!

Known methods: NONSSL SSL

');
}

if (tep_not_null($parameters)) {
$link .= $page . '?' . tep_output_string($parameters);
$separator = '&';
} else {
$link .= $page;
$separator = '?';
}

while ( (substr($link, -1) == '&') || (substr($link, -1) == '?') ) $link = substr($link, 0, -1);

// Add the session ID when moving from different HTTP and HTTPS servers, or when SID is defined
if ( ($add_session_id == true) && ($session_started == true) && (SESSION_FORCE_COOKIE_USE == 'False') ) {
if (tep_not_null($SID)) {
$_sid = $SID;
} elseif ( ( ($request_type == 'NONSSL') && ($connection == 'SSL') && (ENABLE_SSL == true) ) || ( ($request_type == 'SSL') && ($connection == 'NONSSL') ) ) {
if (HTTP_COOKIE_DOMAIN != HTTPS_COOKIE_DOMAIN) {
$_sid = tep_session_name() . '=' . tep_session_id();
}
}
}

if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) {
while (strstr($link, '&&')) $link = str_replace('&&', '&', $link);

$link = str_replace('?', '/', $link);
$link = str_replace('&', '/', $link);
$link = str_replace('=', '/', $link);

$separator = '?';
}

if (isset($_sid)) {
$link .= $separator . $_sid;
}

return $link;
}

por

////
// Ultimate SEO URLs v2.1
// The HTML href link wrapper function
function tep_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true) {
global $seo_urls;
if ( !is_object($seo_urls) ){
if ( !class_exists('SEO_URL') ){
include_once(DIR_WS_CLASSES . 'seo.class.php');
}
global $languages_id;
$seo_urls = new SEO_URL($languages_id);
}
return $seo_urls->href_link($page, $parameters, $connection, $add_session_id);
}

Ahora editamos admin/categories.php
Justo después del código:
$action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : '');

Añadir lo siguiente:
// Ultimate SEO URLs v2.1
// If the action will affect the cache entries
if ( eregi("(insert|update|setflag)", $action) ) include_once('includes/reset_seo_cache.php');

Casi terminando ya, editamos admin/includes/functions/general.php
y justo antes del último ?> pegamos el siguiente código:
// Function to reset SEO URLs database cache entries
// Ultimate SEO URLs v2.1
function tep_reset_cache_data_seo_urls($action){
switch ($action){
case 'reset':
tep_db_query("DELETE FROM cache WHERE cache_name LIKE '%seo_urls%'");
tep_db_query("UPDATE configuration SET configuration_value='false' WHERE configuration_key='SEO_URLS_CACHE_RESET'");
break;
default:
break;
}
return 'false';
}

Ahora nos queda editar y/o crear el archivo .htacces
Editamos el .htacces, y si tenemos la tienda en un subdirectorio, es decir tudominio.com/directorio . Sustituye /directorio/ por el nombre de tu carpeta. Y pegamos:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /directorio/

RewriteRule ^(.*)-p-(.*).html$ product_info.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-c-(.*).html$ index.php?cPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-m-(.*).html$ index.php?manufacturers_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pi-(.*).html$ popup_image.php?pID=$2&%{QUERY_STRING}
RewriteRule ^(.*)-t-(.*).html$ articles.php?tPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-a-(.*).html$ article_info.php?articles_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pr-(.*).html$ product_reviews.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pri-(.*).html$ product_reviews_info.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-i-(.*).html$ information.php?info_id=$2&%{QUERY_STRING}

Si tu tienda está en el directorio raíz, es decir tudominio.com, tenemos que pgar lo siguiente.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule ^(.*)-p-(.*).html$ product_info.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-c-(.*).html$ index.php?cPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-m-(.*).html$ index.php?manufacturers_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pi-(.*).html$ popup_image.php?pID=$2&%{QUERY_STRING}
RewriteRule ^(.*)-t-(.*).html$ articles.php?tPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-a-(.*).html$ article_info.php?articles_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pr-(.*).html$ product_reviews.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pri-(.*).html$ product_reviews_info.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-i-(.*).html$ information.php?info_id=$2&%{QUERY_STRING}

Ahora ya puedes poner en tu navegador preferido la dirección de tu tienda, el automáticamente se pondrá en marcha!
Desde la tienda, el menú Configuración aparecerá ahora un apartado llamado SEO URL´S donde podrás configurar varios parámetros, como la activación o desactivación de estos, por categorías, échale un vistazo…

9 comentarios a “SEO URL´s para OsCommerce”

  1. xavi dice:

    el problema que me he encontrado con estos módulos es que no funcinoan bien con categorías o artículos cuyo nombre contiene ñ o tildes. ¿soluciona este modulo dicho problema?

  2. jorge dice:

    El archivo “.htacces” en que directorio va y que extencion tiene.Gracias

  3. jorge dice:

    tengo el catalogo en http://www.sumin.com.ar/catalogo he realizado todos los cambios pero no logro hacerlo funcionar

  4. juan manuel dice:

    Muchas gracias por la contribucion es perfecta, solo tengo un lijero problema cuando pincho en marcas y a continuacion en productos me sale esta Url http://www.nutricion-sport.com/fitness-plus-energy-p-430.html?manufacturers_id=43
    como puedo quitar ?manufacturers_id=43

  5. Sr. E dice:

    Tengo el mismo problema que Xavi (#1). No he utilizado este post para instalar esta contribución (he seguido las instrucciones propias del paquete) y funciona correctamente.

    Solo que los acentos y caracteres “no ASCII-128″ no los formatea bien. Necesito saber como “sanitiza” las urls, para poder convertir á por a, é por e, í por i, etc.

    ¿Sabes cómo hacerlo o algún hilo en algún foro donde lo muestre? (he buscado y rebuscado pero no atino, y seguro que hay muchos hilos en foros comentándolo…)

  6. admin dice:

    Hola!

    Desde la administración de la tienda, configuracion–Seo Urls– En la casilla Specials charaters conversion, poner lo siguiente :

    %C3%A1=>a,é=>e, %C3%83%C2%B3 =>o, ó =>o, í=>i, á =>a, ñ=>n, ü =>u

    Saludos!

  7. paolo dice:

    hola amigos, mi problema es el siguiente: cuando voy a editar el producto hay una opcion donde tengo que describir el producto; en el idioma ingles no tengo problemas, en el español esta el problema de que cuando utilizo la ñ o una tilde a partir de la palabra que contiene ese caracter se me corta lo demas. como soluciono. estoy trabajando en local

  8. Ignacio dice:

    Hola

    Tenía el mismo problema que Xavi y Sr. E.
    OK incluí los caracteres especiales y ya aparecían para las categorías, pero para los productos no me lo configura igual.
    Como podría arreglar eso?
    Aquí os dejo el enlace:

    http://www.joyeria-artesana.com/joyeria/joyeria.php

    Gracias de antemano.
    Un saludo.

  9. Ignacio dice:

    Hola de nuevo.

    He solucionado el problema cambiando la opción “Add category parent to product URLs?” a false.

    Pero no me pone las categorías en la ruta y eso sería interesante.

    Alguna idea de lo que puede ser?

    Un saludo.

Deja un comentario