PrestaShop Forum

The best place in the world to ask questions about PrestaShop and get advice from our passionate community!

PrestaShop Forum

Jump to content

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

22 replies to this topic
#1
Cédric Girard

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1074 posts
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 mais je partage désormais mes connaissances sur mon site dédié à Prestashop et Wordpress !

Mon projet phare (créé de A à Z) : Matériel de cuisine professionnel

#2
jolvil

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 2706 posts
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

  • PrestaTeam
  • 9152 posts
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

  • Members
  • PipPipPipPip
  • 1074 posts
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 mais je partage désormais mes connaissances sur mon site dédié à Prestashop et Wordpress !

Mon projet phare (créé de A à Z) : Matériel de cuisine professionnel

#5
Cédric Girard

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1074 posts
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 mais je partage désormais mes connaissances sur mon site dédié à Prestashop et Wordpress !

Mon projet phare (créé de A à Z) : Matériel de cuisine professionnel

#6
Damien Metzger

    PrestaShop Fanatic

  • PrestaTeam
  • 1243 posts
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

  • Members
  • PipPipPipPip
  • 1074 posts
Merci Damien, je vais regarder ça.
EX entrepreneur spécialiste du référencement Prestashop, certifié CESEO - Attention, je n'exerce plus mais je partage désormais mes connaissances sur mon site dédié à Prestashop et Wordpress !

Mon projet phare (créé de A à Z) : Matériel de cuisine professionnel

#8
Jeff_30

    PrestaShop Apprentice

  • Members
  • PipPip
  • 86 posts
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

  • Members
  • PipPipPipPip
  • 1074 posts
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 mais je partage désormais mes connaissances sur mon site dédié à Prestashop et Wordpress !

Mon projet phare (créé de A à Z) : Matériel de cuisine professionnel

#10
Cédric Girard

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1074 posts
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 mais je partage désormais mes connaissances sur mon site dédié à Prestashop et Wordpress !

Mon projet phare (créé de A à Z) : Matériel de cuisine professionnel

#11
Cédric Girard

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1074 posts
(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 mais je partage désormais mes connaissances sur mon site dédié à Prestashop et Wordpress !

Mon projet phare (créé de A à Z) : Matériel de cuisine professionnel

#12
Milhouse

    PrestaShop Apprentice

  • Members
  • PipPip
  • 53 posts
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

  • Members
  • PipPip
  • 53 posts
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

  • Members
  • PipPipPipPip
  • 1074 posts
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 mais je partage désormais mes connaissances sur mon site dédié à Prestashop et Wordpress !

Mon projet phare (créé de A à Z) : Matériel de cuisine professionnel

#15
lehangart

    PrestaShop Apprentice

  • Members
  • PipPip
  • 117 posts
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

  • Members
  • PipPip
  • 53 posts
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

  • Members
  • PipPip
  • 117 posts
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

  • Members
  • PipPip
  • 53 posts
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

  • Members
  • PipPip
  • 158 posts
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

  • Members
  • PipPipPipPip
  • 1074 posts
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 mais je partage désormais mes connaissances sur mon site dédié à Prestashop et Wordpress !

Mon projet phare (créé de A à Z) : Matériel de cuisine professionnel