PrestaShop Forums: v1.1 et URL des produits avec les catégories : désactivable ?... - PrestaShop Forums

Jump to content


Welcome to the PrestaShop Forum! We hope you'll share your comments and suggestions with us. We ask that you please post in English to the main sections of the PrestaShop Forum. If you want to write in another language, please post in the corresponding PrestaShop Community section below.

Please note that PrestaShop Community sections are largely self-moderated. PrestaShop team members may or may not participate in non-English sections. To improve the chances of receiving feedback to your question or comment, please post it in English to the main sections of our Forum.

NYC

Vous parlez français ? par ici !


v1.1 et URL des produits avec les catégories : désactivable ?...


v1.1 et URL des produits avec les catégories : désactivable ?...

#1 Cédric Girard

    PrestaShop Fanatic

  • 20 Jun 2008
  • Members
  • PipPipPipPip
  • 1053 posts
  • Location:CHAUFFOUR LES BAILLY

Posted 23 December 2008 - 04:01 PM

Bonjour


Bon, je l'avoue je n'ai pas encore installé la v1.1 (la base est créée, le script uploadé, etc... mais je n'ai pas eu le temps matériel de le faire !)

Une question me turlupine néanmoins, au niveau des URL produits car j'ai lu dans le blog que les URL de ces derniers sont désormais de la format "/categorie/id-produit.php"

Est-ce obligatoire ?

Quid du comportement en cas de produits figurant dans plusieurs catégories ? Car là il y a un risque MAJEUR de duplicate content :roll: (chose que je me suis occupé de corriger en intégralité dans la v1.0 - source de la modif bientôt mise à disposition de la communauté !)
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus !

Last work : Matériel de cuisine professionnel
Actually : Matériel de cuisine et recettes

#2 jolvil

    PrestaShop Fanatic

  • 22 Dec 2007
  • Members
  • PipPipPipPip
  • 2682 posts
  • Location:Paris

Posted 23 December 2008 - 05:39 PM

j'ai regardé sur mon site en V1.1, si tu places un objet dans 2 categories cela redirige vers la meme page, donc l'adresse est la meme. Il n'y a donc qu'une page et pas de duplicate content.

#3 Patric Codron

    PrestaShop Superstar

  • 17 Jun 2008
  • PrestaTeam
  • 8901 posts

Posted 23 December 2008 - 10:22 PM

Ca utilise peut-être uniquement la catégorie par défaut pour l'affichage de l'URL... A vérifier...
Patric CodronCommunity Manager | Manager de CommunautéPrestaShop

Posted Image Merci de respecter les règles du forum PrestaShop.com :)
Posted Image Please comply with the PrestaShop.com forum rules :)


#4 Cédric Girard

    PrestaShop Fanatic

  • 20 Jun 2008
  • Members
  • PipPipPipPip
  • 1053 posts
  • Location:CHAUFFOUR LES BAILLY

Posted 24 December 2008 - 10:26 AM

OK merci

C'est déjà ça :cheese:


Si je ne repasse pas dans le coin : joyeux Noël à toutes et à tous !
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus !

Last work : Matériel de cuisine professionnel
Actually : Matériel de cuisine et recettes

#5 Cédric Girard

    PrestaShop Fanatic

  • 20 Jun 2008
  • Members
  • PipPipPipPip
  • 1053 posts
  • Location:CHAUFFOUR LES BAILLY

Posted 26 December 2008 - 07:20 PM

Up

J'ai installé la 1.1, subsistent des soucis au niveau des URL...

Est-il possible de désactiver la catégorie dans les URL de produits ? Finalement j'y tiens car d'un point de vue SEO pur, j'aime quand c'est carré et démultiplier les mots-clés dans les URL, perso je n'aime pas trop...
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus !

Last work : Matériel de cuisine professionnel
Actually : Matériel de cuisine et recettes

#6 Damien Metzger

    PrestaShop Fanatic

  • 04 Aug 2007
  • PrestaTeam
  • 1243 posts
  • Location:Paris - France

Posted 26 December 2008 - 08:11 PM

Ce n'est pas désactivable mais c'est très facile de faire joujou avec. Il suffit de toucher à la classe Link (/classes/Link.php) et au htaccess (même pas ce dernier d'ailleurs, on a gardé les 2 lignes je crois).

#7 Cédric Girard

    PrestaShop Fanatic

  • 20 Jun 2008
  • Members
  • PipPipPipPip
  • 1053 posts
  • Location:CHAUFFOUR LES BAILLY

Posted 27 December 2008 - 11:26 AM

Merci Damien, je vais regarder ça.
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus !

Last work : Matériel de cuisine professionnel
Actually : Matériel de cuisine et recettes

#8 Jeff_30

    PrestaShop Apprentice

  • 10 Sep 2008
  • Members
  • PipPip
  • 80 posts

Posted 28 December 2008 - 11:22 AM

Bonjour,

J’avais remarqué cette petite différence de réécriture qui peut aussi poser quelques petits pb lors des mises à jour de sites en production qui utilisent l’ancienne réécriture.

Merci Cédric d’avoir ouvert cette discussion ;)

Au-delà du key de la catégorie que l’on retrouve dans l’URL des produits la mise à jour vers la 1.1 peut poser quelques petits pb au niveau du ref qui a déjà été fait ; Modification des URL dans les moteurs, si des liens spontanés ont été faits vers un produit à partir d’autres sites ces liens ne seront plus valides, etc ….. Bref ……

J’ai donc (merci Damien) modifié le fichier link.php dans classe pour retrouver l’ancienne réécriture pour les produits :

J’ai remplacé les lignes 41 à 52 de link.php de la V1.1 par celle de la V1.0 :


Remplacement de lignes 41 à 52 par :


    
// public function getProductLink($id_product, $alias = NULL, $ean13 = NULL)
public function getProductLink($id_product, $alias = NULL, $category = NULL, $ean13 = NULL) // fonctionne mieux an gardant cette ligne !!
{
if (!isset($this->allow)) $this->allow = 0;
if (is_object($id_product))
return ($this->allow == 1)?(__PS_BASE_URI__.intval($id_product->id).'-'.$id_product->link_rewrite.($id_product->ean13 ? '-'.$id_product->ean13 : '').'.html') :
(_PS_USE_SSL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product->id));
elseif ($alias)
return ($this->allow == 1)?(__PS_BASE_URI__.intval($id_product).'-'.$alias.($ean13 ? '-'.$ean13 : '').'.html') :
(_PS_USE_SSL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product));
else
return _PS_USE_SSL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product);
}


Sans toucher au .htaccess car la ligne existe encore.

Edit 03.30 pm : voir commentaire dans le code

#9 Cédric Girard

    PrestaShop Fanatic

  • 20 Jun 2008
  • Members
  • PipPipPipPip
  • 1053 posts
  • Location:CHAUFFOUR LES BAILLY

Posted 28 December 2008 - 06:24 PM

Super merci !

Juste histoire de compléter ta contribution, j'apporterai dans ce post les modifs à faire dans le header.php pour éviter tout risque de duplicate content ;-)
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus !

Last work : Matériel de cuisine professionnel
Actually : Matériel de cuisine et recettes

#10 Cédric Girard

    PrestaShop Fanatic

  • 20 Jun 2008
  • Members
  • PipPipPipPip
  • 1053 posts
  • Location:CHAUFFOUR LES BAILLY

Posted 28 December 2008 - 08:05 PM

Up !

Comme dirait Rocco Siffredi, "Chose promise, chose dure" :cheese:


Voici une petite modif à réaliser dans le fichier "header.php" à la racine de votre boutique ; le code à insérer (voir plus bas) est à mettre sous la ligne suivante :


require_once(dirname(__FILE__).'/init.php');



Informations préalables :
* code réalisé et testé uniquement sur boutiques installées à la racine de leur nom de domaine (je pense qu'il faudra modifier le code pour les autres)
* nécessite l'activation impérative de la réécriture d'URL depuis le back-office
* tient compte du paramétrage de PHP (récupération de l'URL courante dans $_ENV['REQUEST_URI'] dans le code ci-dessous ; il est possible que votre paramétrage serveur utilise $_SERVER['REQUEST_URI'])
* testé sur boutiques versions 1.0 finale (sans autres modifs) et 1.1 finale avec la modification de la classe link.php ci-dessus

Ce qui est corrigé :
* URLs des pages produits uniques : quelle que soit l'URL appelée, si elle ne correspond pas à l'URL théorique telle que définie dans les caractéristiques du produit, elle est redirigée automatiquement (redirection HTTP 301)
* URLs des pages catégories uniques : idem
* gestion des pages catégories paginées/triées : elles sont corrigées comme préalablement, et en cas de présence de paramètre de pagination (page différente de la page 1 et/ou présence d'un élément de tri), positionnement de la variable Prestashop "nobots" qui a pour effet de mettre la balise META Robots en "noindex,follow" (en clair : la page n'est pas indexable par les moteurs de recherche mais les URLs sont suivies normalement)


Voilà donc le fameux code, en prod sur l'une de mes boutiques depuis 4 semaines maintenant (à adapter le cas échéant !) :

/***** Correct URL Product testing *****/
/***** Code by C.GIRARD http://www.effi10.com *****/

// Global variable for marquing "noindex" pages on meta robots (for ex. for pagined categories pages, or non useful pages like "conditions.php", etc...)

if (isset($_GET['id_product']) AND Validate::isUnsignedId($_GET['id_product']))
{
// We're on a product page
$cookie = new Cookie('ps');
Tools::setCookieLanguage();
$product = new Product(intval($_GET['id_product']), true, intval($cookie->id_lang));
if (Validate::isLoadedObject($product) AND $product->active)
{
$goodurl=$_GET['id_product']."-".$product->link_rewrite.".html"; // Theorical URL
$currenturl=basename($_ENV['REQUEST_URI']); // Current URL

$redir=strcmp($goodurl, $currenturl);
if($redir!=0)
{
// Not the good URL so we do a 301 HTTP redirection to the good one !
header('HTTP/1.1 301 Moved Permanently', false, 301);
header("Location: http://" . $_SERVER["SERVER_NAME"] ."/". $goodurl);
exit();
}
};
}

if (isset($_GET['id_category']) AND Validate::isUnsignedId($_GET['id_category']))
{
// We're on a category page
$cookie = new Cookie('ps');
Tools::setCookieLanguage();
$category = new Category(intval(Tools::getValue('id_category')), intval($cookie->id_lang));
if (Validate::isLoadedObject($category) AND $category->active)
{
$theoricalurl="";

// Detection of potential page number
if (isset($_GET['p'])) {
$varpagenumber=$_GET['p'];
if($varpagenumber>1) {
$theoricalurl="?p=$varpagenumber";
$smarty->assign('nobots', 1); // put a "noindex,follow" value on meta robots to avoid duplicate content on pagined categories pages
};
};


if (isset($_GET['orderby'])) {
$varorderby=$_GET['orderby'];
$theoricalurl.=(empty($theoricalurl)?"?":"&")."orderby=$varorderby";
$smarty->assign('nobots', 1); // put a "noindex,follow" value on meta robots to avoid duplicate content on sorted categories pages
};
if (isset($_GET['orderway'])) {
$varorderway=$_GET['orderway'];
$theoricalurl.=(empty($theoricalurl)?"?":"&")."orderway=$varorderway";
$smarty->assign('nobots', 1); // put a "noindex,follow" value on meta robots to avoid duplicate content on sorted categories pages
};

$goodurl=$_GET['id_category']."-".$category->link_rewrite.$theoricalurl; // Theorical URL
$currenturl=basename($_ENV['REQUEST_URI']); // Current URL
$redir=strcmp($goodurl, $currenturl);
if($redir!=0)
{
// Not the good URL so we do a 301 HTTP redirection to the good one !
header('HTTP/1.1 301 Moved Permanently', false, 301);
header("Location: http://" . $_SERVER["SERVER_NAME"] ."/". $goodurl);
exit();
}
};
}



Améliorations envisageables :
* uniformisation du code quelque soit le paramétrage de PHP
* prise en charge des boutiques installées en sous-répertoires
* prise en charge des pages CMS (pour activation de la variable "nobots" par exemple)


;-)
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus !

Last work : Matériel de cuisine professionnel
Actually : Matériel de cuisine et recettes

#11 Cédric Girard

    PrestaShop Fanatic

  • 20 Jun 2008
  • Members
  • PipPipPipPip
  • 1053 posts
  • Location:CHAUFFOUR LES BAILLY

Posted 28 December 2008 - 08:06 PM

(vous noterez que j'ai commenté in english juste histoire de partager le code avec la communauté... bon, j'ai pas traduit mon billet, hein :lol: )
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus !

Last work : Matériel de cuisine professionnel
Actually : Matériel de cuisine et recettes

#12 Milhouse

    PrestaShop Apprentice

  • 01 Feb 2008
  • Members
  • PipPip
  • 53 posts
  • Location:Mulhouse

Posted 04 February 2009 - 03:52 PM

J'allais faire un truc du genre, car depuis le passage en 1.1 c'est la cata au niveau visites chez moi et je pense que Google m'a sanctionné pouur duplicate content... Depuis la nouvelle version, les anciennes urls sans catégorie sont toujours valides alors que de nouvelles avec catégorie ont fait leur apparition. Il faudrait effectivement faire comme tu as fait avec une 301. Par contre le nobots sur le CMS je suis pas pour. En effet les pages CMS peuvent avoir beaucoup de texte intéressant à indexer. Je vais essayer d'installer ton code sur ma boutique et voir si je dois adapter quelque chose. J'ai une difficulté supplémentaire car le .com change la langue en anglais alors que le .fr est du français (du coup j'ai du modifier le module gsitemap pour avoir 2 sitemaps).

Message à la Prestateam : ajoutez cette modif d'origine, ça c'est super !
Ma boutique Prestashop : Parapharmacie en ligne - Online Drugstore

#13 Milhouse

    PrestaShop Apprentice

  • 01 Feb 2008
  • Members
  • PipPip
  • 53 posts
  • Location:Mulhouse

Posted 04 February 2009 - 05:22 PM

J'ai modifié ton premier if pour achever le but inverse, c'est à dire conserver la catégorie, chose qui, il me semble, est assez logique. J'ai pas testé de fond en comble, mais ça a l'air de fonctionner (mais ne fonctionnera sûrement que si votre boutique est à la racine.

J'ai aussi rajouté un truc pour éviter la redirection si il s'agit de l'ajout d'un commentaire à un produit, car sinon l'ajout est impossible.
if (isset($_GET['id_product']) AND Validate::isUnsignedId($_GET['id_product']) && !isset($_POST["content"]))
{
// We're on a product page
$cookie = new Cookie('ps');
Tools::setCookieLanguage();
$product = new Product(intval($_GET['id_product']), true, intval($cookie->id_lang));
if (Validate::isLoadedObject($product) AND $product->active)
{
$category = Category::getLinkRewrite($product->id_category_default, intval($cookie->id_lang));
$goodurl="/".($category ? ($category.'/') : '').$_GET['id_product']."-".$product->link_rewrite.".html"; // Theorical URL
$currenturl=$_ENV['REQUEST_URI'];//basename($_ENV['REQUEST_URI']); // Current URL

$redir=strcmp($goodurl, $currenturl);
if($redir!=0)
{
// Not the good URL so we do a 301 HTTP redirection to the good one !
header('HTTP/1.1 301 Moved Permanently', false, 301);
header("Location: http://" . $_SERVER["SERVER_NAME"] . $goodurl);
exit();
}
};
}

Ma boutique Prestashop : Parapharmacie en ligne - Online Drugstore

#14 Cédric Girard

    PrestaShop Fanatic

  • 20 Jun 2008
  • Members
  • PipPipPipPip
  • 1053 posts
  • Location:CHAUFFOUR LES BAILLY

Posted 05 February 2009 - 05:20 PM

Ah voui, j'utilise pas les commentaires sur produits...


Pour les pages CMS, il est clair que l'on peut désirer en faire indexer certaines, mais pour ce qui est de la livraison, des CGV et autres mentions légales : aucun intérêt :) (à moins que tu ne veuilles viser la première page Google sur "Conditions générales de vente" :cheese: )
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus !

Last work : Matériel de cuisine professionnel
Actually : Matériel de cuisine et recettes

#15 lehangart

    PrestaShop Apprentice

  • 04 Dec 2008
  • Members
  • PipPip
  • 113 posts

Posted 25 February 2009 - 03:43 PM

Bonjour,
Les redirections de Milhouse fonctionne bien mais mettent hors circuit les modules "sendtoafriend" ou "productquestion"
Qu'elle est la manip pour les laisser opérationnels?
Merci
Vente en ligne d'oeuvres d'art
HangART online shop
Galerie d'art contemporain

Prestashop Version 1.2.5.0

Hébergement 1and1 mutualisé

#16 Milhouse

    PrestaShop Apprentice

  • 01 Feb 2008
  • Members
  • PipPip
  • 53 posts
  • Location:Mulhouse

Posted 25 February 2009 - 03:48 PM

En fait dans cette ligne
if (isset($_GET['id_product']) AND Validate::isUnsignedId($_GET['id_product']) && !isset($_POST["content"]))


Tu peux rajouter d'autres variables genre celle envoyées par le module sendtoafriend pour empêcher de changer l'url dans ce cas, comme j'ai fait pour les commentaires en fait.
Ma boutique Prestashop : Parapharmacie en ligne - Online Drugstore

#17 lehangart

    PrestaShop Apprentice

  • 04 Dec 2008
  • Members
  • PipPip
  • 113 posts

Posted 25 February 2009 - 04:13 PM

Merci pour la réponse, mais je ne sais pas détecter ces variables...
Alors si tu pouvais me renseigner un peu plus.
Vente en ligne d'oeuvres d'art
HangART online shop
Galerie d'art contemporain

Prestashop Version 1.2.5.0

Hébergement 1and1 mutualisé

#18 Milhouse

    PrestaShop Apprentice

  • 01 Feb 2008
  • Members
  • PipPip
  • 53 posts
  • Location:Mulhouse

Posted 25 February 2009 - 04:36 PM

Je viens de regarder et pour sendtoafriend, c'est pas une variable, il vérifier l'URL, j'ai pas trop le temps de regarder là, mais dès que j'ai du temps je le fais. C'est pas très compliqué.
Ma boutique Prestashop : Parapharmacie en ligne - Online Drugstore

#19 cybersteph

    PrestaShop Apprentice

  • 27 Nov 2008
  • Members
  • PipPip
  • 158 posts
  • Location:Hte loire 43 France

Posted 11 March 2009 - 10:46 PM

Au secours, cedric.
impossible à faire marcher, malgrés tout les essais en longt en large et en trav...!!
J'ai pourtant bien suivi http://www.effi10.co...licate-content/
Je suis en V1.1 chez ovh
ca tourne en boucle l'url se réécri bien et page blanche
et sans ca duplicate content sur toute les url pour google.
Une idée??
merci
E-commercant depuis 2004
Prestashop V1.2.5 modifié final en production!
PROMAC OSX!!!

#20 Cédric Girard

    PrestaShop Fanatic

  • 20 Jun 2008
  • Members
  • PipPipPipPip
  • 1053 posts
  • Location:CHAUFFOUR LES BAILLY

Posted 12 March 2009 - 10:39 AM

Bonjour

Je pense que ça doit venir du htaccess et de ses options. Je sais que chez OVH il y a des trucs tordus sur ce point précis... et il me semble qu'il y a eu des fils sur ce forum à ce sujet !

Je travaille avec eux pour les domaines ou les certifs SSL, mais pour l'hébergement, j'ai arrêté : ras le bol des spécificités (que ce soit pour Prestashop ou pour d'autres CMS : Wordpress, etc...)
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus !

Last work : Matériel de cuisine professionnel
Actually : Matériel de cuisine et recettes





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users