THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline


Bonjour à tous,
j'ai des problèmes 7 erreurs trouvé sur indexation google qui semblerait,.... fait chuter le positionnement dans google
"""
Champ " brand " Manquant
Champ " review " Manquant
Champ " aggregateRating " Manquant
Champ " product ID " Manquant
Champ " priceValidUntil " Manquant
Champ " url " manquant
Champ " availability " Manquant

Quelqu'un as t'il solutionné ?
ou trouver une parade ?
Merci a vous

Christian


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


je pense que c'est, en partie, ce que ma fait informatique prog
https://github.com/thelia/thelia/issues/2527

Offline


cela à t'il
résolu le problèmes ?


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


ca était fait pour ma synchronisation avec google marchand center, et ca marche très bien, même avec le pse

Offline


pse ? ça veux dire quoi s'il te plait


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


je ne comprend pas,
et surtout je ne voie pas le rapport
mon problème est des erreurs dans mes pages
la console  google search control me signale ses erreurs


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


Ces données sont à modifié dans ton template, page product.html

Renseigne toi sur les données structurées



et après il faut que tu les mettes au bon endroit

exemple:

<span itemprop="url" content="{$URL}"></span>
                            <span itemprop="priceValidUntil" content="{$dateprice}"></span>
                            <meta itemprop="itemCondition" itemtype="http://schema.org/ItemCondition" content="NewCondition">
                            {if $QUANTITY >= 1}
                            <span itemprop="availability" content="http://schema.org/InStock"></span>
                            {elseif $QUANTITY <= 0}
                            <span itemprop="availability" content="http://schema.org/OutofStock"></span>
                            {/if}
                            <span itemprop="priceCurrency" content="EUR"> </span>

Ceci n'est qu'un exemple qu'il te faudra adapter à ton template.

Offline


Salut merci de prendre le temps,
"""
Renseigne toi sur les données structurées
"""
et ou ?
j'était tenté de rajouter des champs "brand  " et autres dans la page product.html


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


Selon comment est configuré ton thelia,

soit tu gère par une caractéristique soit par la boucle brand directement, mais cela se joue l'intérieur de la boucle product pour pouvoir récupérer les paramètres de ton produit en cours.

pour afficher cette attribut, il faut jouer avec l'un ou l'autre de ces paramètres

regarde l'exemple que je t'ai mis ci dessus

Offline


Bonjour a tous
Je reviens car je n'est pas bien compris...
Donc dans la "google search control" on me signale 7 erreurs
les 4 premières on me les signale dans la partie "<article id="product----  </script></article> "
or dans ma page "produc.html dans mon template"
il y a brand " copie ci dessous "

Par contre dans la page en ligne avec produit copie "google search control" il n'y a plus de brand ?
Quelqu'un sait il pourquoi ?

<div class="main">
        {loop name="product.details" type="product" id=$product_id limit="1" with_prev_next_info="1" with_prev_next_visible="1"}
        <article id="product" class="col-main row" role="main" itemscope itemtype="http://schema.org/Product">

            {$pse_count=$PSE_COUNT}

            {* Use the meta tag to specify content that is not visible on the page in any way *}
            {loop name="brand.feature" type="brand" product={$ID}}
                <meta itemprop="brand" content="{$TITLE}">
            {/loop}

            {* Add custom feature if needed
            {loop name="isbn.feature" type="feature" product={$ID} title="isbn"}
                {loop name="isbn.value" type="feature_value" feature={$ID} product=$product_id}
                    <meta itemprop="productID" content="isbn:{$TITLE}">
                {/loop}
            {/loop}
            *}

            {hook name="product.top" product={$ID}}

            {ifhook rel="product.gallery"}
               {hook name="product.gallery" product={$ID}}
            {/ifhook}
            {elsehook rel="product.gallery"}
            <section id="product-gallery" class="col-sm-6">
                {ifloop rel="image.main"}
                <figure class="product-image">
                    {loop type="image" name="image.main" product={$ID} width="578" height="950" resize_mode="borders" limit="1"}
                        <img src="{$IMAGE_URL nofilter}" alt="{$TITLE}" class="img-responsive" itemprop="image" data-toggle="magnify">
                    {/loop}
                </figure>
                {/ifloop}

                {ifloop rel="image.carousel"}
                <div id="product-thumbnails" class="carousel slide" style="position:relative;">
                    <div class="carousel-inner">
                        <div class="item active">
                            <ul class="list-inline">
                                {loop name="image.carousel" type="image" product={$ID} width="560" height="445" resize_mode="borders" limit="5"}
                                <li>
                                    <a href="{$IMAGE_URL nofilter}" class="thumbnail {if $LOOP_COUNT == 1}active{/if}">
                                        {loop type="image" name="image.thumbs" id={$ID} product="$OBJECT_ID" width="118" height="85" resize_mode="borders"}
                                            <img src="{$IMAGE_URL nofilter}" alt="{$TITLE}">
                                        {/loop}
                                    </a>
                                </li>
                                {/loop}
                            </ul>
                        </div>
                        {ifloop rel="image.carouselsup"}
                        <div class="item">
                            <ul class="list-inline">
                                {loop name="image.carouselsup" type="image" product={$ID} width="560" height="445" resize_mode="borders" offset="5"}
                                    <li>
                                        <a href="{$IMAGE_URL nofilter}" class="thumbnail">
                                            {loop type="image" name="image.thumbssup" id={$ID} product="$OBJECT_ID" width="118" height="85" resize_mode="borders"}
                                                <img src="{$IMAGE_URL nofilter}" alt="{$TITLE}">
                                            {/loop}
                                        </a>
                                    </li>
                                {/loop}
                            </ul>
                        </div>
                        {/ifloop}
                    </div>
                    {ifloop rel="image.carouselsup"}
                        <a class="left carousel-control" href="#product-thumbnails" data-slide="prev"><i class="fa fa-caret-left"></i></a>
                        <a class="right carousel-control" href="#product-thumbnails" data-slide="next"><i class="fa fa-caret-right"></i></a>
                    {/ifloop}
                </div>
                {/ifloop}
            </section>
            {/elsehook}

            <section id="product-details" class="col-sm-6">
                {hook name="product.details-top" product={$ID}}

                <div class="product-info">
                    <h1 class="name"><span itemprop="name">{$TITLE}</span><span id="pse-name" class="pse-name"></span></h1>
                    {if $REF}<span itemprop="sku" class="sku">{intl l='Ref.'}: <span id="pse-ref">{$REF}</span></span>{/if}

                    {loop name="brand_info" type="brand" product={$ID} limit="1"}
                        <p><a href="{$URL nofilter}" title="{intl l="More information about this brand"}"><span itemprop="brand">{$TITLE}</span></a></p>
                    {/loop}

                    {if $POSTSCRIPTUM}<div class="short-description">
                        <p>{$POSTSCRIPTUM}</p>
                    </div>{/if}
                </div>

                {loop type="sale" name="product-sale-info" product={$ID} active="1"}
                    <div class="product-promo">
                        <p class="sale-label">{$SALE_LABEL}</p>
                        <p class="sale-saving"> {intl l="Save %amount%sign on this product" amount={$PRICE_OFFSET_VALUE} sign={$PRICE_OFFSET_SYMBOL}}</p>
                        {if $HAS_END_DATE}
                            <p class="sale-period">{intl l="This offer is valid until %date" date={format_date date=$END_DATE output="date"}}</p>
                        {/if}
                    </div>
                 {/loop}

                <div class="product-price" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
                    <div class="availability">
                        <span class="availibity-label sr-only">{intl l="Availability"}: </span>
                        <span itemprop="availability" href="{$current_stock_href}" class="" id="pse-availability">
                            <span class="in">{intl l='In Stock'}</span>
                            <span class="out">{intl l='Out of Stock'}</span>
                        </span>
                    </div>

                    <div class="price-container">
                        {loop type="category" name="category_tag" id=$DEFAULT_CATEGORY}
                            <meta itemprop="category" content="{$TITLE}">
                        {/loop}
                        {* List of condition : NewCondition, DamagedCondition, UsedCondition, RefurbishedCondition *}
                        <meta itemprop="itemCondition" itemtype="http://schema.org/ItemCondition" content="NewCondition">
                        {* List of currency : The currency used to describe the product price, in three-letter ISO format. *}
                        <meta itemprop="priceCurrency" content="{currency attr="code"}">

                        <span id="pse-promo">
                            <span class="special-price"><span class="price-label">{intl l="Special Price:"} </span><span id="pse-price" class="price">{format_money number=$TAXED_PROMO_PRICE symbol={currency attr="symbol"}}</span></span>
                            <meta itemprop="price" content="{$TAXED_PROMO_PRICE}">
                            {if $SHOW_ORIGINAL_PRICE}
                                <span class="old-price"><span class="price-label">{intl l="Regular Price:"} </span><span id="pse-price-old" class="price">{format_money number=$TAXED_PRICE}</span></span>
                            {/if}
                        </span>
                    </div>

                    <div id="pse-validity" class="validity alert alert-warning" style="display: none;" >
                        {intl l="Sorry but this combination does not exist."}
                    </div>

                </div>

                {form name="thelia.cart.add" }
                <form id="form-product-details" action="{url path="/cart/add" }" method="post" class="form-product">
                    {form_hidden_fields}
                    <input type="hidden" name="view" value="product">
                    <input type="hidden" name="product_id" value="{$ID}">
                    {form_field field="append"}
                        <input type="hidden" name="{$name}" value="1">
                    {/form_field}
                    {form_field form=$form field="success_url"}
                        <input type="hidden" name="{$name}" value="{url path='/cart'}">
                    {/form_field}

                    {if $form_error}<div class="alert alert-error">{$form_error_message}</div>{/if}

                    {form_field field="product"}
                        <input id="{$label_attr.for}" type="hidden" name="{$name}" value="{$ID}" {$attr} >
                    {/form_field}

                    {* pse *}
                    {form_field field='product_sale_elements_id'}
                    <input id="pse-id" class="pse-id" type="hidden" name="{$name}" value="{$PRODUCT_SALE_ELEMENT}" {$attr} >
                    {/form_field}

                    {if $pse_count > 1}
                        {* We have more than 1 combination: custom form *}
                        <fieldset id="pse-options" class="product-options">
                            {loop name="attributes" type="attribute" product="$product_id" order="manual"}
                            <div class="option option-option">
                                <label for="option-{$ID}" class="option-heading">{$TITLE}</label>
                                <div class="option-content clearfix">
                                    <select id="option-{$ID}" name="option-{$ID}" class="form-control input-sm pse-option" data-attribute="{$ID}"></select>
                                </div>
                            </div>
                            {/loop}
                            <div class="option option-fallback">
                                <label for="option-fallback" class="option-heading">{intl l="Options"}</label>
                                <div class="option-content clearfix">
                                    <select id="option-fallback" name="option-fallback" class="form-control input-sm pse-option pse-fallback" data-attribute="0"></select>
                                </div>
                            </div>
                        </fieldset>


                    {/if}

                    <fieldset class="product-cart form-inline">
                        {form_field field='quantity'}
                        <div class="form-group group-qty {if $error}has-error{elseif $value != "" && !$error}has-success{/if}">
                            <label for="{$label_attr.for}">{$label}</label>
                            <input type="number" name="{$name}" id="{$label_attr.for}" class="form-control" value="{$value|default:1}" min="1" required>
                            {if $error }
                                <span class="help-block">{$message}</span>
                            {elseif $value != "" && !$error}
                                <span class="help-block"><i class="fa fa-check"></i></span>
                            {/if}
                        </div>
                        {/form_field}

                        <div class="form-group group-btn">
                            <button id="pse-submit" type="submit" class="btn btn_add_to_cart btn-primary"><i class="fa fa-chevron-right"></i> {intl l="Add to cart"}</button>
                        </div>
                    </fieldset>

                </form>
                {/form}
                {hook name="product.details-bottom" product={$ID}}
            </section>

            {strip}
                {capture "additional"}
                    {ifloop rel="feature_info"}
                        <ul>
                            {loop name="feature_info" type="feature" product={$ID}}
                            {ifloop rel="feature_value_info"}
                                <li>
                                    <strong>{$TITLE}</strong> :
                                    {loop name="feature_value_info" type="feature_value" feature={$ID} product=$product_id}
                                        {if $LOOP_COUNT > 1}, {else} {/if}
                                        <span>{if $IS_FREE_TEXT == 1}{$FREE_TEXT_VALUE}{else}{$TITLE}{/if}</span>
                                    {/loop}
                                </li>
                            {/ifloop}
                            {/loop}
                        </ul>
                    {/ifloop}
                {/capture}
            {/strip}

            {strip}
                {capture "brand_info"}
                    {loop name="brand_info" type="brand" product={$ID} limit="1"}
                        <p><strong><a href="{$URL nofilter}">{$TITLE}</a></strong></p>

                        {loop name="brand.image" type="image" source="brand" id={$LOGO_IMAGE_ID} width=218 height=146 resize_mode="borders"}
                            <p><a href="{$URL nofilter}"><img itemprop="image" src="{$IMAGE_URL nofilter}" alt="{$TITLE}"></a></p>
                        {/loop}

                        {if $CHAPO}
                            <div class="chapo">
                                {$CHAPO}
                            </div>
                        {/if}
                        {if $DESCRIPTION}
                            <div class="description">
                                {$DESCRIPTION nofilter}
                            </div>
                        {/if}
                        {if $POSTSCRIPTUM}
                            <small class="postscriptum">
                                {$POSTSCRIPTUM}
                            </small>
                        {/if}
                    {/loop}
                {/capture}
            {/strip}

            {strip}
                {capture "document"}
                    {ifloop rel="document"}
                    <ul>
                    {loop name="document" type="document" product=$ID visible="yes"}
                        <li>
                            <a href="{$DOCUMENT_URL}" title="{$TITLE}" target="_blank">{$TITLE}</a>
                        </li>
                    {/loop}
                    </ul>
                    {/ifloop}
                {/capture}
            {/strip}

            <section id="product-tabs" class="col-sm-12">
                {hookblock name="product.additional" product=$product_id fields="id,class,title,content"}
                <ul class="nav nav-tabs" role="tablist">
                    <li class="active" role="presentation"><a id="tab1" href="#description" data-toggle="tab" role="tab">{intl l="Description"}</a></li>
                    {if $smarty.capture.additional ne ""}<li role="presentation"><a id="tab2" href="#additional" data-toggle="tab" role="tab">{intl l="Additional Info"}</a></li>{/if}
                    {if $smarty.capture.brand_info ne ""}<li role="presentation"><a id="tab3" href="#brand_info" data-toggle="tab" role="tab">{intl l="Brand information"}</a></li>{/if}
                    {if $smarty.capture.document ne ""}<li role="presentation"><a id="tab4" href="#document" data-toggle="tab" role="tab">{intl l="Documents"}</a></li>{/if}
                    {forhook rel="product.additional"}
                        <li role="presentation"><a id="tab{$id}" href="#{$id}" data-toggle="tab" role="tab">{$title}</a></li>
                    {/forhook}
                </ul>
                <div class="tab-content">
                    <div class="tab-pane active in" id="description" itemprop="description" role="tabpanel" aria-labelledby="tab1">
                        <p>{$DESCRIPTION|default:'N/A' nofilter}</p>
                    </div>
                    {if $smarty.capture.additional ne ""}
                        <div class="tab-pane" id="additional" role="tabpanel" aria-labelledby="tab2">
                            {$smarty.capture.additional nofilter}
                        </div>
                    {/if}
                    {if $smarty.capture.brand_info ne ""}
                        <div class="tab-pane" id="brand_info" role="tabpanel" aria-labelledby="tab3">
                            {$smarty.capture.brand_info nofilter}
                        </div>
                    {/if}
                    {if $smarty.capture.document ne ""}
                        <div class="tab-pane" id="document" role="tabpanel" aria-labelledby="tab4">
                            {$smarty.capture.document nofilter}
                        </div>
                    {/if}
                    {forhook rel="product.additional"}
                    <div class="tab-pane" id="{$id}" role="tabpanel" aria-labelledby="tab{$id}">
                        {$content nofilter}
                    </div>
                    {/forhook}
                </div>
                {/hookblock}
            </section>
            {hook name="product.bottom" product={$ID}}

{* javascript confiuguration to display pse *}
{$pse=[]}
{$combination_label=[]}
{$combination_values=[]}
{loop name="pse" type="product_sale_elements" product=$product_id}
    {$pse[$ID]=["id" => $ID, "isDefault" => $IS_DEFAULT, "isPromo" => $IS_PROMO, "isNew" => $IS_NEW, "ref" => {$REF}, "ean" => {$EAN}, "quantity" => {$QUANTITY}, "price" => {format_money number=$TAXED_PRICE}, "promo" => {format_money number=$TAXED_PROMO_PRICE} ]}
    {$pse_combination=[]}
    {loop name="combi" type="attribute_combination" product_sale_elements="$ID" order="manual"}
        {if ! $combination_label[$ATTRIBUTE_ID]}
            {$combination_label[$ATTRIBUTE_ID]=["name" => {$ATTRIBUTE_TITLE}, "values" => []]}
        {/if}
        {if ! $combination_values[$ATTRIBUTE_AVAILABILITY_ID]}
            {$combination_label[$ATTRIBUTE_ID]["values"][]=$ATTRIBUTE_AVAILABILITY_ID}
            {$combination_values[$ATTRIBUTE_AVAILABILITY_ID]=[{$ATTRIBUTE_AVAILABILITY_TITLE}, $ATTRIBUTE_ID]}
        {/if}
        {$pse_combination[]=$ATTRIBUTE_AVAILABILITY_ID}
    {/loop}
    {$pse[$ID]["combinations"]=$pse_combination}
{/loop}

<script type="text/javascript">
    // Product sale elements
    var PSE_FORM = true;
    var PSE_COUNT = {$pse_count};
    {if $check_availability == 0 || $product_virtual == 1 }
        var PSE_CHECK_AVAILABILITY = false;
    {else}
        var PSE_CHECK_AVAILABILITY = true;
    {/if}
    var PSE_DEFAULT_AVAILABLE_STOCK = {config key="default_available_stock" default="100"};
    var PSE = {$pse|json_encode nofilter};
    var PSE_COMBINATIONS = {$combination_label|json_encode nofilter};
    var PSE_COMBINATIONS_VALUE = {$combination_values|json_encode nofilter};
</script>

        </article><!-- /#product -->

        <ul class="pager">
            {if $HAS_PREVIOUS == 1}
                {loop type="product" name="prev_product" id={$PREVIOUS}}
                    <li class="previous"><a href="{$URL nofilter}"><i class="fa fa-chevron-left"></i> {intl l="Previous product"}</a></li>
                {/loop}
            {/if}
            {if $HAS_NEXT == 1}
                {loop type="product" name="next_product" id={$NEXT}}
                    <li class="next"><a href="{$URL nofilter}"><i class="fa fa-chevron-right"></i> {intl l="Next product"}</a></li>
                {/loop}
            {/if}
        </ul>
        {/loop}

    </div><!-- /.main -->
    {else}
    <div class="main">
        <article id="content-main" class="col-main" role="main" aria-labelledby="main-label">
            {include file="includes/empty.html"}
        </article>


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


A verifier si le code source des pages que la search console te renvoi.

Peut être que la boucle "brand" ne s'affiche simplement pas car vide pour ces produits.

Offline

Offline


Bonjour a vous,

https://www.armagnac-millesime.fr/armagnac-1989.html


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


Est ce que la marque est renseignée sur ta fiche produit?
(tu vas sur une fiche produit / onglets général -> à droite tu as "marque/fournisseur" )

Offline


non faut rajouter obligatoire ?


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


non je n'ai pas rempli ce champ


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


et en plus je ne peu pas le remplir, ...
ou faut il le faire ?


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline

Offline


ok c'est fait,
Mais cela ne résous pas les avertissements dans la google search console,


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir

Offline


Il faut valider les marques produits par produit .

Donc faut que tu te refasse toute tes fiches produits une à une.

Ensuite une fois que c'est fait... tu valide les corrections dans ta search console.

Offline


ok je vais donc faire
je te remercie Thibs wink


Toujours en forme,
La différence entre le possible et l’impossible, c’est la volonté, et le  temps ...
Oui mais... ça c'est avec la meilleure volonté du Monde,
Et elle est, des fois, difficile à tenir