Je viens de découvrir une exigence drôle. C’est une sorte de catalogue de produits quevous pouvez filtrer pour divers attributs, comme une marque la taille, la couleur ou le type.
Normalement, je dirais que tout type de recherche est une requête POST, et donc les pages de résultats ne sont pas accessibles par n’importe quel moteur de recherche de toute façon vous n’avez donc pas besoin de penser au SEO. Mais dans ce cas, l’exigence SEO friendly URL est insisté dessus.
Alors voici mes propositions.
Voyons ensemble des exigences plus en détail.
L’URL doit être SEO friendly
Il ya un certain nombre d’environ 10 paramètres qui peut être étendue plus tard
L’utilisateur n’utilisera quelques paramètres de sorte que toute combinaison doit êtreconsidérée
Voici mes quatre solutions.
1. Très simple requête URL
products:
url: /products
params: { module: product, action: filterList }
Ceci produira
<?php
echo url_for('@product');
// -> /products
echo url_for('@product?color=black');
// -> /products?color=black
echo url_for('@product?brand=apple&size=13inch');
// -> /products?brand=apple&size=13inch
echo url_for('@product?model=sunglasses&style=cool');
// -> /products?model=sunglasses&style=cool
Toutes les combinaisons de travail et sera le nombre de paramètres n’est pas limité. Mais c’est très old school et pas SEO friendly. Même un peu gênant
2. Structure des dossier URL KEY/VALUE
products:
url: /products/*
params: { module: product, action: filterList }
Ce qui produit
<?php
echo url_for('@product');
// -> /products
echo url_for('@product?color=black');
// -> /products/color/black
echo url_for('@product?brand=apple&size=13inch');
// -> /products/brand/apple/size/13inch
echo url_for('@product?model=sunglasses&style=cool');
// -> /products/model/sunglasses/style/cool
C’est beaucoup mieux, mais les noms des paramètres supplémentaires ne sont pas pertinents aux moteurs de recherche et pourrait les confondre lors de la tentative de construire un arbre de contexte.
3. URL plus courte avec des valeurs par défaut pour les paramètres inutilisés
products:
url: /products/:brand/:model/:color/:size/:style
params: { module: product, action: filterList, brand: all-brands, model: all-models, color: all-colors, size: all-sizes, style: all-styles }
Ce qui donne
<?php
echo url_for('@product');
// -> /products
echo url_for('@product?color=black');
// -> /products/all-brands/all-models/black
echo url_for('@product?brand=apple&size=13inch');
// -> /products/apple/all-models/all-colors/13inch
echo url_for('@product?model=sunglasses&style=cool');
// -> /products/all-brands/sunglasses/all-colors/all-sizes/cool
Cela ressemble beaucoup mieux. Comme les valeurs de chacun des paramètressusceptibles de se chevaucher, nous devons compter dessus l’ordre des paramètres.Définir les valeurs par défaut permet de maintenir une telle ordonnance et d’un point de vue SEO friendly c’est logique.
4. URL complète avec les valeurs par défaut pour les paramètres inutilisés
products:
url: /products/:brand/:model/:color/:size/:style
params: { module: product, action: filterList, brand: all-brands, model: all-models, color: all-colors, size: all-sizes, style: all-styles }
options:
generate_shortest_url: false
<?php
echo url_for('@product');
// -> /products/all-brands/all-models/all-colors/all-sizes/all-styles
echo url_for('@product?color=black');
// -> /products/all-brands/all-models/black/all-sizes/all-styles
echo url_for('@product?brand=apple&size=13inch');
// -> /products/apple/all-models/all-colors/13inch/all-styles
echo url_for('@product?model=sunglasses&style=cool');
// -> /products/all-brands/sunglasses/all-colors/all-sizes/cool
Si vous préférez que votre URL un peu plus détaillée ce serait votre option. Je préfèrealler pour le plus court, mais SEO friendly sage il devrait y avoir aucune différence.
Voir l’article original : http://test.ical.ly/2011/02/03/4-ways-to-encode-a-variable-number-of-parameters-in-a-url-using-symfony-routing/

