Miva is a product with many features included. When the included features don't work out of the box (or off the lot) the consumer should not be told that they now will have to pay extra to get non functional standard features that come with the product to work as expected.
It seems every time we have a problem (not this schema problem) with an embedded feature in Levels that does not work we are advised to get a developer to fix it - and these are things that are built into Levels... try to use them and they don't work out of the box - that means to me that they never worked. Fixing them is not a feature enhancement request or a "Dream Feature". Some things just don't work out of the box. I consider those to be bugs - not some enhancement request.
This schema problem did work out of the box but it is not going to work in March for any ReadyTheme store that is using the feature.
I had another message that in the Miva App Store only Collosus and Shadows are non legacy. Everything else is legacy (allegedly) so any features included in those ReadyThemes that don't work out of the box Miva Support will not fix (I'm guessing). At least that is what we are experiencing. That is a shame that the Miva App Store is offering so many ReadyThemes that when there is a problem the customer is going to be told to pay a developer to fix the nonworking feature.
There has been no customization of the Rich Snippets in these stores - we just want what appears to be boilerplate that comes with the ReadyTheme to function without Google warnings or errors. The code seems to be exactly the same in the examples from the Miva App Store. It probably should just be a copy/paste (with an update/correction) of what comes with the ReadyTheme. I know I can add more if I want to but right now I don't want to. I want what came with Miva to work.
The example link that was provided before plugs into the PROD page and updates without a Miva error but it will not pass the Google Structured Data Testing tool with an error - not a warning. That tells me that nobody tested the proposed solution or if they did test it they did not care about the errors. Maybe nobody but me cares about Google errors/warning about malformed or erroneous code. It could be that no other Miva user is looking at the Google email reports about warnings and errors.
How can nobody else on the planet have seen these warning/errors about the built in schema code and come up with a fix to the basic schema code that comes with a ReadyTheme that can be shared? (all ReadyThemes in the Miva App Store with the schema code seem afflicted in exactly the same way).
The Live Demos of Collosus and Shadows do not seem to include Rich Snippets (like the others do) but in March all those other ReadyThemes are going to start generating Google errors (currently warnings) so hopefully Miva will take responsibility with a copy/paste update or somebody will step up to the plate and come up with the solution.
I have thought of some other ideas which I will be pursuing or will just stay tuned until March when every legacy ReadyTheme on the planet begins generating Google errors on every product page in every store. Somebody will come up with and hopefully share a solution.
Announcement
Collapse
No announcement yet.
ReadyTheme Rich Snippets Code Deprecated
Collapse
X
-
Here is a starting point for the JSON-LD code. Both Shadows and Colossus ship with this as a JavaScript Resource which you can enable in the administration portal.
Leave a comment:
-
Here is a starting point for the JSON-LD code. Both Shadows and Colossus ship with this as a JavaScript Resource which you can enable in the administration portal.
Code:<mvt:comment><!-- Google Tag Manager - Data Layer --></mvt:comment> var dataLayer = dataLayer || []; <mvt:comment><!-- Page Type Assignment --></mvt:comment> <mvt:if expr="l.settings:page:code EQ 'SFNT'"> <mvt:assign name="l.settings:dataLayer:pageType" value="'home'" /> <mvt:elseif expr="l.settings:page:code EQ 'SRCH' OR l.settings:page:code EQ 'SEARCH'"> <mvt:assign name="l.settings:dataLayer:pageType" value="'searchresults'" /> <mvt:elseif expr="l.settings:page:code EQ 'CTGY'"> <mvt:assign name="l.settings:dataLayer:pageType" value="'category'" /> <mvt:elseif expr="l.settings:page:code EQ 'PROD'"> <mvt:assign name="l.settings:dataLayer:pageType" value="'product'" /> <mvt:elseif expr="l.settings:page:code CIN 'BASK,ORDL,OCST,OUS1,OUSM,OSEL,OPAY'"> <mvt:assign name="l.settings:dataLayer:pageType" value="'cart'" /> <mvt:elseif expr="l.settings:page:code EQ 'INVC'"> <mvt:assign name="l.settings:dataLayer:pageType" value="'purchase'" /> <mvt:else> <mvt:assign name="l.settings:dataLayer:pageType" value="'other'" /> </mvt:if> <mvt:comment><!-- Checkout Step Assignment --></mvt:comment> <mvt:if expr="l.settings:page:code EQ 'BASK'"> <mvt:assign name="l.settings:datalayer:checkout_step" value="1"/> <mvt:elseif expr="l.settings:page:code EQ 'ORDL'"> <mvt:assign name="l.settings:datalayer:checkout_step" value="2"/> <mvt:elseif expr="l.settings:page:code EQ 'OCST'"> <mvt:assign name="l.settings:datalayer:checkout_step" value="3"/> <mvt:elseif expr="g.Screen EQ 'OUSL'"> <mvt:assign name="l.settings:datalayer:checkout_step" value="4"/> <mvt:elseif expr="l.settings:page:code EQ 'OSEL'"> <mvt:assign name="l.settings:datalayer:checkout_step" value="5"/> <mvt:elseif expr="l.settings:page:code EQ 'OPAY'"> <mvt:assign name="l.settings:datalayer:checkout_step" value="6"/> </mvt:if> <mvt:comment><!-- User Email Assignment --></mvt:comment> <mvt:if expr="g.customer:bill_email"> <mvt:assign name="l.settings:datalayer:userEmail" value="g.customer:bill_email" /> <mvt:elseif expr="g.basket:bill_email"> <mvt:assign name="l.settings:datalayer:userEmail" value="g.basket:bill_email" /> <mvt:else> <mvt:assign name="l.settings:datalayer:userEmail" value="''" /> </mvt:if> <mvt:comment><!-- Basic DataLayer Push --></mvt:comment> dataLayer.push({ <mvt:if expr="g.Screen EQ 'NTFD'"> "canonicalUri": "<mvt:eval expr="encodejavascriptstring( s.request_uri )" />", "event": "NTFD", <mvt:elseif expr="g.Screen EQ 'SRCH'"> "canonicalUri": "<mvt:eval expr="encodejavascriptstring( s.request_uri )" />", "searchTerm": "&mvtj:global:Search;", "event": "SRCH", <mvt:else> "canonicalUri": "&mvtj:ga_tracking:url_override_unencoded;", </mvt:if> "requestUri": "<mvt:eval expr="encodejavascriptstring( s.request_uri )" />", "refererUri": "<mvt:eval expr="encodejavascriptstring( s.http_referer )" />", "pageCode": "&mvtj:page:code;", "pageType": "&mvtj:datalayer:pageType;", "pageName": "&mvtj:datalayer:pageName;", "userId": "&mvtj:global:basket:cust_id;", "userEmail": "&mvtj:datalayer:userEmail;", "basketId": "&mvtj:global:basket:basket_id;", "categoryCode": "&mvtj:global:Category_Code;", "categoryName": "&mvtj:datalayer:categoryName;", "productCode": "&mvtj:product:code;", "checkoutStep": "&mvtj:datalayer:checkout_step;" }); <mvt:comment><!-- PROD DataLayer Push --></mvt:comment> <mvt:if expr="l.settings:page:code EQ 'PROD'"> <mvt:if expr="NOT ISNULL l.settings:product:variant"> dataLayer.push({ "ecommerce": { "detail": { "products": [{ "name": "&mvtj:product:variant:name;", "id": "&mvtj:product:variant:code;", "price": "&mvtj:product:variant:price;", "sku": "&mvtj:product:variant:code;", "category": "", "variant": "" }] } }, "content_type": "product", "content_ids": "&mvtj:product:variant:code;", "value": "&mvt:product:variant:price;", "currency": "USD" }); <mvt:else> dataLayer.push({ "ecommerce": { "detail": { "products": [{ "name": "&mvtj:product:name;", "id": "&mvtj:product:code;", "price": "&mvtj:product:price;", "sku": "&mvtj:item:sku;", "category": "", "variant": "" }] } }, "content_type": "product", "content_ids": "&mvtj:product:code;", "value": "&mvt:product:price;", "currency": "USD" }); </mvt:if> </mvt:if> <mvt:comment><!-- INVC DataLayer Push --></mvt:comment> <mvt:if expr="l.settings:page:code EQ 'INVC'"> <mvt:foreach iterator="charge" array="order:charges"> <mvt:if expr="l.settings:charge:type EQ 'TAX'"> <mvt:assign name="l.settings:gtm:tax" value="l.settings:charge:disp_amt" /> <mvt:elseif expr="l.settings:charge:type EQ 'SHIPPING'"> <mvt:assign name="l.settings:gtm:shipping" value="l.settings:charge:disp_amt" /> </mvt:if> </mvt:foreach> <mvt:if expr="miva_array_elements(l.settings:order:items) GT 1"> <mvt:assign name="l.settings:content_ids" value="'['" /> </mvt:if> <mvt:foreach iterator="item" array="order:items"> <mvt:if expr="POS1 GT 1"> <mvt:assign name="l.settings:content_ids" value="l.settings:content_ids $ ',' $ asciichar(39) $ encodejavascriptstring( l.settings:item:code ) $ asciichar(39)" /> <mvt:else> <mvt:assign name="l.settings:content_ids" value="l.settings:content_ids $ asciichar(39) $ encodejavascriptstring( l.settings:item:code ) $ asciichar(39)" /> </mvt:if> </mvt:foreach> <mvt:if expr="miva_array_elements(l.settings:order:items) GT 1"> <mvt:assign name="l.settings:content_ids" value="l.settings:content_ids $ ']'" /> </mvt:if> dataLayer.push({ "event": "invc", "ecommerce": { "purchase": { "actionField": { "id": "&mvtj:order:id;", "revenue": "&mvtj:order:total;", "tax": "&mvtj:gtm:tax;", "shipping": "&mvtj:gtm:shipping;" }, "products": [ <mvt:foreach iterator="item" array="order:groups"> <mvt:if expr="POS1 GT 1">,</mvt:if> { "name": "&mvtj:item:name;", "id": "&mvtj:item:code;", "price": "&mvtj:item:price;", "sku": "&mvtj:item:sku;", <mvt:if expr="miva_array_elements(l.settings:item:options) GT 0"> <mvt:assign name="l.settings:item:gtm_variant" value="''" /> <mvt:foreach iterator="option" array="item:options"> <mvt:if expr="POS2 GT 1"> <mvt:assign name="l.settings:item:gtm_variant" value="l.settings:item:gtm_variant $ ' ' " /> </mvt:if> <mvt:assign name="l.settings:item:gtm_variant" value="l.settings:item:gtm_variant $ l.settings:option:opt_code" /> </mvt:foreach> <mvt:if expr="l.settings:item:gtm_variant"> "variant": "&mvtj:item:gtm_variant;", </mvt:if> </mvt:if> "quantity": &mvtj:item:quantity; }, </mvt:foreach> ], "coupons": [ <mvt:foreach iterator="coupon" array="order:coupons"> "&mvtj:coupon:code;", </mvt:foreach> ] } }, "order_id": "&mvtj:order:id;", "order_total": "&mvtj:order:total;", "content_type": "product", "content_ids": "&mvtj:content_ids;", "value": &mvtj:order:total;, "currency": "USD" }); <mvt:comment><!-- (OTHER)CHECKOUT PAGES DataLayer Push --></mvt:comment> <mvt:elseif expr="l.settings:datalayer:checkout_step"> <mvt:if expr="miva_array_elements(l.settings:basket:items) GT 1"> <mvt:assign name="l.settings:content_ids" value="'['" /> </mvt:if> <mvt:foreach iterator="item" array="basket:items"> <mvt:if expr="POS1 GT 1"> <mvt:assign name="l.settings:content_ids" value="l.settings:content_ids $ ',' $ asciichar(39) $ encodejavascriptstring( l.settings:item:code ) $ asciichar(39)" /> <mvt:else> <mvt:assign name="l.settings:content_ids" value="l.settings:content_ids $ asciichar(39) $ encodejavascriptstring( l.settings:item:code ) $ asciichar(39)" /> </mvt:if> </mvt:foreach> <mvt:if expr="miva_array_elements(l.settings:basket:items) GT 1"> <mvt:assign name="l.settings:content_ids" value="l.settings:content_ids $ ']'" /> </mvt:if> dataLayer.push({ "event": "checkout", "ecommerce": { "checkout": { "actionField": { "step": &mvt:datalayer:checkout_step; }, "products": [ <mvt:foreach iterator="item" array="global_minibasket:items"> { "name": "&mvtj:item:name;", "id": "&mvtj:item:product:code;", "price": "&mvtj:item:price;", "sku": "&mvtj:item:sku;", "category": "", "variant": "", "quantity": &mvtj:item:quantity; }, </mvt:foreach> ], "coupons": [ <mvt:foreach iterator="coupon" array="global_minibasket:coupons"> "&mvtj:coupon:code;", </mvt:foreach> ] } }, "content_type": "product", "content_ids": "&mvt:content_ids;", "value": "&mvt:basket:total;", "currency": "USD" }); </mvt:if>
Leave a comment:
-
If you're going to update your site you may as well switch to Google's preferred method of structured data, JSON-LD, instead of the micro-data. It's faster spider-food and easier to maintain.
I like the JSON-LD @type parameter because it provides a better method to graph a website and organization, instead of individual webpages.
Leave a comment:
-
The older, legacy ReadyThemes (which encompasses any ReadyTheme not based on Shadows) have soon-to-be deprecated code. Those ReadyThemes were originally created using the latest standardized meta/micro-data content recommendations. Considering the sunset status of those ReadyThemes, the decision was been made to only issue updates if a security risk is discovered. This, of course, means there will be no updates for Schema.
Updating the product page - where the Schema code is usually added – may only require a simple cut-and-paste assuming there have been no page layout customization to the code. However, the majority of users DO have customization which makes it more difficult to perform the necessary updates. If you do not feel comfortable performing the updates yourself, I would recommend contacting either Professional Services or one of our Agency Partners for assistance.
- 1 like
Leave a comment:
-
I expect Miva to be sure the structured data they do supply works
Full disclosure, being an integration/developer, having a starting point, whether it worked 100% or not, is a major step forward in the place of starting from nothing and build it from scratch. It saves the client some time and money. The last thing to add from me, I don't think this piece of structured data deprecation announcement has been widely available. At least for me. My nose is generally buried in a client's store. This is a good discussion because I hadn't been aware of this. Now, I have clients who will need to have their structured data updated. Somebody, ask me if I have time! Thanks, Google!
Leave a comment:
-
If I bought a new car and among many standard options I foolishly expected to work let's say the radio doesn't work and I take it back to the dealer and they say "Yes the radio doesn't work, when we sold the new car to you we knew the radio doesn't work and if you want the radio to work you are going to have to pay somebody to fix it.
As its been pointed out, there is no way Miva COULD provide a plugin replacement. The fact that you used the 'default' template markup and got away with it (or maybe not) is coincidence. I've never been able to do that with the hundreds of sites I've worked on.
Basically, its like you leased a building for your store from miva, and it came with shelving and racks, and now you want miva to come in and change the racks and shelving around because the ADA now requires a minimum of 48" aisles.
One of us will be probably doing this for our older sites, and I certainly am happy to post THOSE examples, but unless you take the time to understand the impact of each option, you probably wont get much benefit from implementing them.
- 2 likes
Leave a comment:
-
Originally posted by joseibarra View Post
In the Miva App Store which ReadyThemes are not legacy?
Hopefully nobody will ever pick Levels because they will not get support for included features that do not work.
Shouldn't Levels be stricken from the App Store?
- 1 like
Leave a comment:
-
We ere told the Levels ReadyTheme is legacy and we know it has included features that do not work and Support will not offer a solution - get a developer we are told.
If I bought a new car and among many standard options I foolishly expected to work let's say the radio doesn't work and I take it back to the dealer and they say "Yes the radio doesn't work, when we sold the new car to you we knew the radio doesn't work and if you want the radio to work you are going to have to pay somebody to fix it. You want the windows to go up and down? You'll have to pay somebody to fix that. By the way, you may find out later that the airbags don't work either and we know the airbags don't work and if you want them to work you are going to have to pay somebody to fix them." That's what Miva (or Support) seems to be doing to us with Levels.
The Miva App Store still offers Levels but Support will not address the built in features that don't work since it is legacy. If Levels is no longer supported why is it still offered when there are several features that don't work? I do appreciate not updating legacy code but these are included features that when you try to use them you find they do not work.
I don't expect Miva to create a complete functional set of structured data. The problem is the "staring point" included with the ReadyThemes has a problem. It should not be unreasonable to have Miva at least fix the starting point.
I expect Miva to be sure the structured data they do supply works - or don't supply it at all (the easiest out for Miva). Just like we expected some features of Levels to work when we wanted to use them they don't work and Miva/Support won't fix them.
I don't care about structured data that the standard product does not supply - if I want to add more later I can. The problem is the structured data that is supplied is not going to work in March at least for the themes I viewed. I want the structured data that comes with the standard product to work and come March none of the structured data elements in any of the ReadyThemes I looked at will work. When some other customer opens a ticket for the structured data not working will Support say "It's legacy and no longer supported"? Surprise, Mr. Customer!
In the Miva App Store which ReadyThemes are not legacy?
Hopefully nobody will ever pick Levels because they will not get support for included features that do not work.
Shouldn't Levels be stricken from the App Store?
I will pick a non legacy theme to use and then when it has the schema issue Support will not be able to use their legacy reasoning and they will have to fix it, right?Last edited by joseibarra; 01-28-20, 06:20 AM.
Leave a comment:
-
I don't think you should expect Miva to create a complete functional set of structured data template code. It's a starting point like a ReadyTheme is a "starting point" for the look and feel for your store.
If I recall the schema.org specs, the data needs to be structured properly to match what you want to present. The specs tell you all the requirements of the elements. I don't think I'm defending Miva here because, IMO, there is no way for Miva to know how you need/want to structure your data. It's even possible that a store could have multiple structured data requirements because different products need to have very different presentation information. And here's another example, late last year I added some structured to a client's store with elements that needed data the standard product data doesn't supply. Therefore, we needed to use custom product fields to populate the product page template with valid data for the elements that were missing.
Scott
- 1 like
Leave a comment:
-
The linked to example from bonnie1525 (the basic markup from Brennan) has the basic snippets but does not pass the Google Structured Data Testing Tool - and that post from dstauffer where I think the site is https://www.bpimedicalsupply.com/SFNT.html has switched back to data-vocabulary.org and is not using schema.org and it too will not pass the Google Structured Data Testing Tool.
The snippet code in the PROD template appears to be generic boilerplate that comes with the ReadyTheme and we have not tampered with it and it just contains basic snippets - nothing customized for our stores.
In the ReadyTheme examples in the Miva App Store the snippet code (from View, Source) appears to be generic and the same for every RT with just the basic snippets but that code will start to generate Google errors in March. Every ReadyTheme I looked at in the Miva app store will generate Google errors in March unless the snippet code is replaced.
I don't think or see that the snippet code is specific to any ReadyTheme - it is generic boilerplate. In the Miva App Store they all look the same and they are all wrong using the deprecated data-vocabulary.org (not using schema.org).
Example from Optics:
<!-- Google Rich Snippets -->
<div itemscope itemtype="http://data-vocabulary.org/Product">
<meta itemprop="name" content="Red Streamlined" />
<meta itemprop="image" content="http://optics-theme.mivamerchantdev.com/mm5/graphics/00000001/eyeglasses5.png" />
<meta itemprop="category" content="Men" />
<meta itemprop="price" content="$69.95" />
<meta itemprop="description" content="Try this bold look for evenings and weekends. " />
<!-- <meta itemprop="brand" content="" /> For Use With CPF -->
<div itemprop="offerDetails" itemscope itemtype="http://data-vocabulary.org/Offer">
<meta itemprop="identifier" content="upc:red-streamlined" />
<meta itemprop="price" content="$69.95" />
<meta itemprop="currency" content="USD" />
<meta itemprop="seller" content="Optics ReadyTheme" />
<meta itemprop="condition" content="new" />
</div>
Example from Iron and Wool:
<!-- Google Rich Snippets -->
<div itemscope itemtype="http://data-vocabulary.org/Product">
<meta itemprop="name" content="Under ArmourŪ Hustle Backpack" />
<meta itemprop="image" content="http://ironwool.mivamerchantdev.com/mm5/graphics/00000001/green-bag-front.png" />
<meta itemprop="category" content="Camp & Hike" />
<meta itemprop="price" content="$54.99" />
<meta itemprop="description" content="<div class="left">
<!-- <meta itemprop="brand" content="" /> For Use With CPF -->
<div itemprop="offerDetails" itemscope itemtype="http://data-vocabulary.org/Offer">
<meta itemprop="identifier" content="upc:under-armour-huslte-backpack" />
<meta itemprop="price" content="$54.99" />
<meta itemprop="currency" content="USD" />
<meta itemprop="seller" content="Iron & Wool ReadyTheme" />
<meta itemprop="condition" content="new" />
</div>
Example from Suviant:
<!-- Google Rich Snippets -->
<div itemscope itemtype="http://data-vocabulary.org/Product">
<meta itemprop="name" content="Elegance Boot" />
<meta itemprop="image" content="http://suivant-theme.mivamerchantdev.com/mm5/graphics/00000001/boot1.png" />
<meta itemprop="category" content="Boots" />
<meta itemprop="price" content="$129.90" />
<meta itemprop="description" content="A bold fold-over cuff and a gleaming exposed zip lend moto-chic edge to a saucy peep-toe bootie styled with a cutout heel." />
<!-- <meta itemprop="brand" content="" /> For Use With CPF -->
<div itemprop="offerDetails" itemscope itemtype="http://data-vocabulary.org/Offer">
<meta itemprop="identifier" content="upc:elegance" />
<meta itemprop="price" content="$129.90" />
<meta itemprop="currency" content="USD" />
<meta itemprop="seller" content="Suivant ReadyTheme" />
<meta itemprop="condition" content="new" />
</div>
They are exactly the same snippets (of course the values are different) but using the deprecated code - it is generic boilerplate code.
Where is the generic boilerplate code for those ReadyThemes that uses schema.org? Has Miva not created it yet?
For ReadyThemes isn't Miva going to replace the snippet code in all the ReadyThemes with a schema.org version that will pass the Structured Data Testing Tool?
Am I jut naive to think that every ReadyTheme will have the exact same generic boilerplate code for snippets? I just don't see how every ReadyTheme will have a different snippet code section. There is nothing theme specific about it. It is just the basic things that would be the same for every implementation.
If it is true that the generic snippet code is the same for every ReadyTheme where is an example of a schema.org version that which will pass the Google Structured Data Testing Tool?
Surely Miva will be updating all the ReadyTheme PROD code to schema.org with just the basic snippets (like Optics, like Iron and Wool, like Suviant, etc.) and test to be sure it passes the Google Structured Data Testing Tool.
You can see they are all using exactly the same snippets.
The schema.org version of that is the hunk of code I seek - has Miva not created that yet?
Leave a comment:
-
Originally posted by ids View PostAh, I missed the date. Sooner than I expected. But, what will the penalty be?
Scott
Leave a comment:
-
Ah, I missed the date. Sooner than I expected. But, what will the penalty be?
Scott
Leave a comment:
-
Originally posted by ids View PostMay not have helped specifically, but this does supply proper and relevant context. The context, IMO, is that a web page of any make and model will always evolve. Mentioning Google, well, they are the major player in this "dance."
et al; Regarding Miva RTs, as soon as you change one thing in a template you're responsible for them going forward. IOW, any potential RT update will override that change. That means you cannot simply do an update of the RTs when Miva evolves them. Further, as we know, sometimes those RTs will cease from evolving anyway.
Until we can read the minds of Google management and developers, we'll be left having to react to the dance steps we needed to know before they were required. Specifically on deprecated Rich Snippets, who knew? And if you did, why didn't you say something sooner?
All that said, IMO, Rich Snippets will likely be viable for a decent amount of time and there is no need for panic. Regardless, switching to Schema.org isn't a mountainous effort. Am I right?
Just trying to keep up with the Googles,
ScottAs of April 6, 2020, data-vocabulary.org markup will no longer be eligible for Google rich result features. To be eligible after April 6, 2020, you need to replace data-vocabulary.org markup with schema.org markup. Learn more about sunsetting support for data-vocabulary.
Leave a comment:
-
LOL "It's the never ending Google dance of change. Sorry, since that didn't really help you in any way." You actually helped by saying it has to be done manually because not all settings are the same in every store. At least the majority is covered in the thread posted by Bonnie1225.
- 1 like
Leave a comment:
Leave a comment: