{"id":389902,"date":"2026-10-22T16:24:21","date_gmt":"2026-10-22T16:24:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/catalog-health-check-for-woocommerce\/"},"modified":"2026-10-22T17:14:55","modified_gmt":"2026-10-22T17:14:55","slug":"michael-check-my-shop-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/michael-check-my-shop-for-woocommerce\/","author":23578309,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.3","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Michael, Check My Shop \u2013 Product Data Audit for WooCommerce","header_author":"M1Sh0u","header_description":"Audits your WooCommerce products for missing or broken data (weights, dimensions, images, alt text, SKUs, GTINs, descriptions, prices) and gives your catalog a health score with lists of what to fix.","assets_banners_color":"bed2ca","last_updated":"2026-10-22 17:14:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/michael-check-my-shop-for-woocommerce\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":85,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"m1sh0u","date":"2026-10-22 16:24:08","revision":3760211},"1.0.1":{"tag":"1.0.1","author":"m1sh0u","date":"2026-10-22 17:14:55","revision":3760272}},"upgrade_notice":{"1.0.1":"<p>Finds near-identical product titles too. Run a new scan to see them.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3760211,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3760211,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3760211,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3760211,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3760272,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Check My Shop demo shop\",\"author\":\"m1sh0u\"},\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=check-my-shop\",\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"features\":{\"networking\":true},\"login\":true,\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"michael-check-my-shop-for-woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\n\\\/\\\/ Demo shop for the wordpress.org Live Preview (WordPress Playground). Runs once after both plugins are active.\\nrequire '\\\/wordpress\\\/wp-load.php';\\nwp_set_current_user( 1 );\\nrequire_once ABSPATH . 'wp-admin\\\/includes\\\/image.php';\\nrequire_once ABSPATH . 'wp-admin\\\/includes\\\/file.php';\\nrequire_once ABSPATH . 'wp-admin\\\/includes\\\/media.php';\\n\\n\\\/\\\/ Skip WooCommerce's own onboarding so the preview opens on the Check My Shop page.\\ndelete_transient( '_wc_activation_redirect' );\\nupdate_option( 'woocommerce_onboarding_profile', array( 'skipped' => true ) );\\nupdate_option( 'woocommerce_task_list_hidden', 'yes' );\\nupdate_option( 'woocommerce_coming_soon', 'no' );\\nupdate_option( 'woocommerce_default_country', 'US:CA' );\\nupdate_option( 'woocommerce_currency', 'USD' );\\nupdate_option( 'woocommerce_dimension_unit', 'cm' );\\nupdate_option( 'woocommerce_weight_unit', 'kg' );\\nupdate_option( 'blogname', 'Oak & Ember Home' );\\n\\n$cats = array();\\nforeach ( array( 'Kitchen', 'Living room', 'Bedroom', 'Wellness', 'Office' ) as $name ) {\\n\\t$term          = wp_insert_term( $name, 'product_cat' );\\n\\t$cats[ $name ] = is_wp_error( $term ) ? (int) $term->get_error_data() : (int) $term['term_id'];\\n}\\n\\n\\\/\\\/ Valid EAN-13 from a 12-digit base.\\n$ean = static function ( $base ) {\\n\\t$sum = 0;\\n\\tforeach ( array_reverse( str_split( $base ) ) as $i => $d ) {\\n\\t\\t$sum += (int) $d * ( 0 === $i % 2 ? 3 : 1 );\\n\\t}\\n\\treturn $base . ( ( 10 - $sum % 10 ) % 10 );\\n};\\n\\n$text = static function ( $name ) {\\n\\treturn \\\"<p>Our {$name} is made in small batches by a family workshop we have worked with for years. Every piece is checked by hand before it leaves the studio, so it arrives ready to use and ready to give.<\\\/p><p>Materials are chosen to last: natural, durable and easy to care for. Wash gently, dry naturally and it will look good for years. Each item varies slightly in color and texture, which is part of its charm. Ships in recyclable packaging.<\\\/p>\\\";\\n};\\n\\n\\\/\\\/ Product photo stand-in drawn with GD (the preview has no image files): a soft background and a disc.\\n$photo = static function ( $product_id, $file, $hue, $size = 1000, $alt = '' ) {\\n\\t$im = imagecreatetruecolor( $size, $size );\\n\\tlist( $r, $g, $b ) = $hue;\\n\\timagefill( $im, 0, 0, imagecolorallocate( $im, (int) ( 255 - ( 255 - $r ) * 0.25 ), (int) ( 255 - ( 255 - $g ) * 0.25 ), (int) ( 255 - ( 255 - $b ) * 0.25 ) ) );\\n\\timagefilledellipse( $im, (int) ( $size \\\/ 2 ), (int) ( $size * 0.54 ), (int) ( $size * 0.56 ), (int) ( $size * 0.56 ), imagecolorallocate( $im, $r, $g, $b ) );\\n\\t$tmp = wp_tempnam( $file );\\n\\timagejpeg( $im, $tmp, 85 );\\n\\timagedestroy( $im );\\n\\t$att = media_handle_sideload( array( 'name' => $file, 'tmp_name' => $tmp ), $product_id );\\n\\tif ( is_wp_error( $att ) ) {\\n\\t\\treturn 0;\\n\\t}\\n\\tset_post_thumbnail( $product_id, $att );\\n\\tif ( '' !== $alt ) {\\n\\t\\tupdate_post_meta( $att, '_wp_attachment_image_alt', $alt );\\n\\t}\\n\\treturn $att;\\n};\\n\\n\\\/\\\/ Name, SKU, price, category, color, size (l, w, h cm, kg; null = missing), GTIN (true = valid, false = none,\\n\\\/\\\/ string = as typed), alt text, extra. Each row has the problem the checks should find.\\n$catalog = array(\\n\\tarray( 'Ceramic Coffee Mug', 'MUG-01', 14, 'Kitchen', array( 196, 120, 84 ), array( 12, 9, 10, 0.4 ), true, 'Ceramic coffee mug', array() ),\\n\\tarray( 'Stoneware Teapot', 'TEA-09', 45, 'Kitchen', array( 112, 140, 128 ), array( 22, 16, 15, 0.9 ), true, 'IMG_4821', array() ),\\n\\tarray( 'French Press 1 L', 'FP-1L', 39, 'Kitchen', array( 90, 90, 96 ), null, true, '', array() ),\\n\\tarray( 'Organic Coffee Beans 1 kg', 'COF-1K', 24, 'Kitchen', array( 120, 82, 60 ), array( 25, 15, 8, 1050 ), true, 'Bag of organic coffee beans', array() ),\\n\\tarray( 'Bamboo Cutting Board Large Extra Thick Kitchen Chopping Board with Juice Groove and Handles for Meat, Vegetables, Cheese and Bread \\u2013 Eco Friendly Gift for Home Cooks', 'BRD-L', 36, 'Kitchen', array( 214, 176, 112 ), array( 45, 30, 3, 1.6 ), true, 'Bamboo cutting board', array() ),\\n\\tarray( 'Glass Water Bottle', 'BOT-75', 22, 'Wellness', array( 120, 176, 196 ), array( 26, 8, 8, 0.5 ), '5012345000127', '', array() ),\\n\\tarray( 'Cork Yoga Mat', 'YOGA-6', 59, 'Wellness', array( 184, 140, 100 ), array( null, null, null, 1.2 ), true, 'Rolled cork yoga mat', array( 'image_size' => 480 ) ),\\n\\tarray( 'Scented Soy Candle', 'CAN-08', 19, 'Living room', array( 230, 200, 150 ), array( 9, 9, 11, 0.45 ), false, '', array( 'thin' => true ) ),\\n\\tarray( 'Linen Throw Pillow', 'PIL-45', 34, 'Living room', array( 160, 170, 140 ), null, true, 'Linen throw pillow', array() ),\\n\\tarray( 'Ceramic Plant Pot', 'POT-02', 28, '', array( 110, 150, 110 ), array( 18, 18, 16, 1.1 ), true, 'Ceramic plant pot', array() ),\\n\\tarray( 'Stoneware Vase', 'VAS-1', 42, 'Living room', array( 150, 120, 150 ), array( 14, 14, 30, 1.3 ), true, 'Stoneware vase', array( 'no_description' => true ) ),\\n\\tarray( 'Brass Desk Lamp', 'LAMP-02', 89, 'Office', array( 200, 160, 70 ), array( 45, 30, 28, 3.5 ), true, 'Brass desk lamp', array( 'image_size' => 3600 ) ),\\n\\tarray( 'Dotted Hardcover Notebook', '', 12, 'Office', array( 70, 90, 120 ), array( 21, 15, 2, 0.35 ), true, '', array() ),\\n\\tarray( 'BLUETOOTH NOISE CANCELLING HEADPHONES', 'HP-BT2', 129, 'Office', array( 60, 60, 66 ), array( 22, 19, 9, 0.62 ), true, 'Wireless headphones', array() ),\\n\\tarray( 'Merino Wool Socks', 'SOCK-3', 18, 'Bedroom', array( 140, 110, 160 ), array( 20, 10, 3, 0.12 ), true, 'Merino wool socks', array( 'stock' => -2 ) ),\\n\\tarray( 'Linen Apron', 'APR-01', 32, 'Kitchen', null, array( 30, 25, 2, 0.3 ), true, '', array() ),\\n\\tarray( 'Walnut Serving Tray', 'TRAY-W', 49, 'Kitchen', array( 110, 76, 50 ), array( 40, 28, 4, 1.1 ), true, 'Walnut serving tray with handles', array( 'sale' => '2.90' ) ),\\n\\tarray( 'Bamboo Tea Towels (set of 3)', 'TWL-3', 18, 'Kitchen', array( 200, 190, 160 ), array( 30, 20, 4, 0.3 ), true, 'Three folded bamboo tea towels', array( 'no_active_price' => true ) ),\\n\\tarray( 'Gift Wrap Sample', 'GIFT-S', 0, 'Living room', array( 190, 150, 110 ), array( 20, 15, 1, 0.05 ), false, 'Gift wrap sample in kraft paper', array() ),\\n);\\n\\n$n = 0;\\nforeach ( $catalog as $row ) {\\n\\tlist( $name, $sku, $price, $cat, $hue, $dims, $gtin, $alt, $extra ) = $row;\\n\\t++$n;\\n\\t$p = new WC_Product_Simple();\\n\\t$p->set_name( $name );\\n\\t$p->set_sku( $sku );\\n\\t$p->set_regular_price( $price );\\n\\tif ( isset( $extra['sale'] ) ) {\\n\\t\\t$p->set_sale_price( $extra['sale'] );\\n\\t}\\n\\tif ( $cat ) {\\n\\t\\t$p->set_category_ids( array( $cats[ $cat ] ) );\\n\\t}\\n\\tif ( $dims ) {\\n\\t\\tlist( $l, $w, $h, $kg ) = $dims;\\n\\t\\t$p->set_length( null === $l ? '' : $l );\\n\\t\\t$p->set_width( null === $w ? '' : $w );\\n\\t\\t$p->set_height( null === $h ? '' : $h );\\n\\t\\t$p->set_weight( null === $kg ? '' : $kg );\\n\\t}\\n\\tif ( true === $gtin ) {\\n\\t\\t$p->set_global_unique_id( $ean( '501234500' . str_pad( (string) $n, 3, '0', STR_PAD_LEFT ) ) );\\n\\t} elseif ( is_string( $gtin ) ) {\\n\\t\\t$p->set_global_unique_id( $gtin );\\n\\t}\\n\\tif ( ! empty( $extra['thin'] ) ) {\\n\\t\\t$p->set_description( '<p>Hand-poured soy wax candle with a cotton wick. Notes of cedar and fig.<\\\/p>' );\\n\\t} elseif ( empty( $extra['no_description'] ) ) {\\n\\t\\t$p->set_description( $text( strtolower( $name ) ) );\\n\\t\\t$p->set_short_description( 'Made in small batches, checked by hand.' );\\n\\t}\\n\\tif ( isset( $extra['stock'] ) ) {\\n\\t\\t$p->set_manage_stock( true );\\n\\t\\t$p->set_stock_quantity( $extra['stock'] );\\n\\t}\\n\\t$p->set_status( 'publish' );\\n\\t$id = $p->save();\\n\\tif ( $hue ) {\\n\\t\\t$size = isset( $extra['image_size'] ) ? $extra['image_size'] : 1000;\\n\\t\\tif ( $size > 2560 ) {\\n\\t\\t\\t\\\/\\\/ Uploaded at full camera size (WordPress's 2560 px scaling turned off), for \\\"Large image file\\\".\\n\\t\\t\\tadd_filter( 'big_image_size_threshold', '__return_false' );\\n\\t\\t}\\n\\t\\t$photo( $id, sanitize_title( $name ) . '.jpg', $hue, $size, $alt );\\n\\t\\tremove_filter( 'big_image_size_threshold', '__return_false' );\\n\\t}\\n\\tif ( ! empty( $extra['no_active_price'] ) ) {\\n\\t\\t\\\/\\\/ An import wrote the regular price but not the price WooCommerce sells at.\\n\\t\\tdelete_post_meta( $id, '_price' );\\n\\t\\twc_delete_product_transients( $id );\\n\\t}\\n}\\n\\n\\\/\\\/ Variable products: a size with no weight and no price, and a size priced $8,900 instead of $89.\\n$variable = static function ( $name, $sku, $cat, $hue, $alt, $sizes ) use ( $cats, $text, $photo ) {\\n\\t$attr = new WC_Product_Attribute();\\n\\t$attr->set_name( 'Size' );\\n\\t$attr->set_options( array_keys( $sizes ) );\\n\\t$attr->set_variation( true );\\n\\t$attr->set_visible( true );\\n\\t$v = new WC_Product_Variable();\\n\\t$v->set_name( $name );\\n\\t$v->set_sku( $sku );\\n\\t$v->set_category_ids( array( $cats[ $cat ] ) );\\n\\t$v->set_attributes( array( $attr ) );\\n\\t$v->set_description( $text( strtolower( $name ) ) );\\n\\t$v->set_short_description( 'Soft, warm and breathable.' );\\n\\t$v->set_status( 'publish' );\\n\\t$id = $v->save();\\n\\tforeach ( $sizes as $size => $data ) {\\n\\t\\tlist( $price, $kg, $gtin ) = $data;\\n\\t\\t$var = new WC_Product_Variation();\\n\\t\\t$var->set_parent_id( $id );\\n\\t\\t$var->set_attributes( array( 'size' => $size ) );\\n\\t\\t$var->set_regular_price( $price );\\n\\t\\t$var->set_weight( $kg );\\n\\t\\t$var->set_length( 40 );\\n\\t\\t$var->set_width( 30 );\\n\\t\\t$var->set_height( 10 );\\n\\t\\t$var->set_global_unique_id( $gtin );\\n\\t\\t$var->save();\\n\\t}\\n\\tWC_Product_Variable::sync( $id );\\n\\t$photo( $id, sanitize_title( $name ) . '.jpg', $hue, 1000, $alt );\\n};\\n$variable(\\n\\t'Merino Wool Blanket',\\n\\t'BLK-WL',\\n\\t'Bedroom',\\n\\tarray( 170, 150, 130 ),\\n\\t'Merino wool blanket, folded',\\n\\tarray(\\n\\t\\t'Throw' => array( '149', '1.4', $ean( '501234500901' ) ),\\n\\t\\t'Queen' => array( '', '', $ean( '501234500902' ) ),\\n\\t)\\n);\\n$variable(\\n\\t'Linen Bed Sheet Set',\\n\\t'SHT-LN',\\n\\t'Bedroom',\\n\\tarray( 150, 170, 190 ),\\n\\t'Linen bed sheets on a made bed',\\n\\tarray(\\n\\t\\t'Single' => array( '59', '1.2', $ean( '501234500911' ) ),\\n\\t\\t'Double' => array( '79', '1.6', $ean( '501234500912' ) ),\\n\\t\\t'King'   => array( '8900', '2.1', $ean( '501234500913' ) ),\\n\\t)\\n);\\n\\n\\\/\\\/ A few days of history, so the score line shows (the plugin records one score per day).\\n$history = array();\\nforeach ( array( 9 => 72, 7 => 75, 5 => 77, 3 => 79, 1 => 81 ) as $days => $score ) {\\n\\t$history[ wp_date( 'Y-m-d', time() - $days * DAY_IN_SECONDS ) ] = $score;\\n}\\nupdate_option( 'cathc_history', $history, false );\\n\\n\\\/\\\/ Run the first full check now, so the preview opens on a finished report instead of a progress bar.\\ndelete_option( 'cathc_needs_setup' );\\nCATHC_Scanner::start();\\nCATHC_Scanner::run_for( 60 );\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3760211,"resolution":"1","location":"assets","locale":"","width":1698,"height":3338},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3760211,"resolution":"2","location":"assets","locale":"","width":1698,"height":1428},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3760211,"resolution":"3","location":"assets","locale":"","width":1908,"height":1650},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3760211,"resolution":"4","location":"assets","locale":"","width":450,"height":293},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3760211,"resolution":"5","location":"assets","locale":"","width":957,"height":324},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3760211,"resolution":"6","location":"assets","locale":"","width":1698,"height":716},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3760211,"resolution":"7","location":"assets","locale":"","width":996,"height":783}},"screenshots":{"1":"The Check My Shop page: score, grade, the percentage complete for each area, what to fix, and our other plugins.","2":"A fix list: every product with that problem, with fields to fix it right there, filters, and CSV export.","3":"The Health column and filter in the product list.","4":"The health box on the product screen.","5":"The dashboard widget.","6":"The Settings tab, with the weekly email report.","7":"The weekly email report."}},"plugin_section":[262246],"plugin_tags":[8533,51229,49648,702,286],"plugin_category":[45],"plugin_contributors":[285255],"plugin_business_model":[],"class_list":["post-389902","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-audit","plugin_tags-google-shopping","plugin_tags-product-data","plugin_tags-products","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-m1sh0u","plugin_committers-m1sh0u"],"banners":{"banner":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/banner-772x250.png?rev=3760211","banner_2x":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/banner-1544x500.png?rev=3760211","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/icon-128x128.png?rev=3760211","icon_2x":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/icon-256x256.png?rev=3760211","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/screenshot-1.png?rev=3760211","caption":"The Check My Shop page: score, grade, the percentage complete for each area, what to fix, and our other plugins."},{"src":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/screenshot-2.png?rev=3760211","caption":"A fix list: every product with that problem, with fields to fix it right there, filters, and CSV export."},{"src":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/screenshot-3.png?rev=3760211","caption":"The Health column and filter in the product list."},{"src":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/screenshot-4.png?rev=3760211","caption":"The health box on the product screen."},{"src":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/screenshot-5.png?rev=3760211","caption":"The dashboard widget."},{"src":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/screenshot-6.png?rev=3760211","caption":"The Settings tab, with the weekly email report."},{"src":"https:\/\/ps.w.org\/michael-check-my-shop-for-woocommerce\/assets\/screenshot-7.png?rev=3760211","caption":"The weekly email report."}],"raw_content":"<!--section=description-->\n<p>Missing product data quietly costs a store money. A product without a weight is undercharged for shipping. A product without an image hardly sells. An invalid GTIN gets the product rejected from Google Shopping. And nobody notices until a customer, a carrier invoice or a feed error points it out.<\/p>\n\n<p><strong>Check My Shop<\/strong> checks every product in your WooCommerce store, gives your catalog a health score from 0 to 100, and lists exactly which products need what.<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=EiPwCqFsuws<\/p>\n\n<h4>What it checks<\/h4>\n\n<p><strong>Shipping data<\/strong><\/p>\n\n<ul>\n<li>Products and variations without a weight<\/li>\n<li>Products without length, width, or height<\/li>\n<li>Sizes or weights that can't be right, like a side over 3 metres or a weight that's impossible for the size (usually a value typed in the wrong unit)<\/li>\n<\/ul>\n\n<p><strong>Images<\/strong><\/p>\n\n<ul>\n<li>Products without a product image<\/li>\n<li>Images that are gone: deleted from the Media Library, or the file is missing on the server<\/li>\n<li>Product and gallery images without alt text<\/li>\n<li>Alt text that is really a file name, like \"IMG_4821\" or \"DSC0193.jpg\"<\/li>\n<li>Product images under 800 pixels, which look blurry when zoomed<\/li>\n<li>Image files over 1 MB or over 2560 pixels, which slow the product page<\/li>\n<\/ul>\n\n<p><strong>Identifiers<\/strong><\/p>\n\n<ul>\n<li>Products without a SKU<\/li>\n<li>SKUs used by more than one product or variation (from imports or sync tools)<\/li>\n<li>GTINs, UPCs, EANs, and ISBNs with the wrong length or check digit<\/li>\n<li>GTINs used by more than one product or variation, which Google Shopping rejects<\/li>\n<li>Products without a brand, in stores that use WooCommerce Brands (at least 1 in 10 products has one)<\/li>\n<li>Products without a GTIN, in stores that use GTINs (at least 1 in 10 products has one)<\/li>\n<\/ul>\n\n<p><strong>Titles and descriptions<\/strong><\/p>\n\n<ul>\n<li>Products with no description at all<\/li>\n<li>Very short descriptions<\/li>\n<li>Titles over 150 characters (Google Shopping's limit)<\/li>\n<li>Titles written in capital letters<\/li>\n<li>Products with the same title as another product, or one that differs only in spaces, punctuation, accents or capitals<\/li>\n<\/ul>\n\n<p><strong>Price, stock and categories<\/strong><\/p>\n\n<ul>\n<li>Products and variations without a price<\/li>\n<li>Prices that are set but not active, so the product can't be added to the cart (usually after an import)<\/li>\n<li>Prices of 0, which let customers order without paying<\/li>\n<li>Sale prices more than 90% off, usually a typo like 1.99 instead of 19.99<\/li>\n<li>Variations that cost 10 times more or less than the others, usually a misplaced decimal point<\/li>\n<li>Negative stock<\/li>\n<li>Products only in the default category<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Health score and grade<\/strong> for the whole catalog, plus a percentage for each area, and how the score changes over the last 90 days.<\/li>\n<li><strong>Fix lists<\/strong> for every check, with product images, SKUs and variation names, filters by severity and category, and <strong>CSV export<\/strong> to work through them in a spreadsheet or hand them to someone.<\/li>\n<li><strong>Fix in the list:<\/strong> type a missing weight, dimensions, SKU, GTIN, price or stock, or pick a category, straight in the fix list and save. The product is re-checked at once, and WooCommerce's own rules still apply (it refuses a SKU another product already has).<\/li>\n<li><strong>Ignore<\/strong> an issue that's fine for a product (a handmade item without a GTIN, say): it stops counting in the score and moves to an \"Ignored issues\" list, where you can undo it.<\/li>\n<li><strong>Health column<\/strong> in the product list, with a filter for products with issues.<\/li>\n<li><strong>Health box<\/strong> on the product screen, listing that product's issues.<\/li>\n<li><strong>Dashboard widget<\/strong> with your score and biggest problems.<\/li>\n<li><strong>Weekly email report<\/strong> (opt-in): your score, how it changed and the three biggest problems, sent through your site's own email.<\/li>\n<li><strong>Always up to date:<\/strong> a product is re-checked as soon as you save it or change the alt text of one of its images. A full check runs in the background once a week, in batches, so even very large catalogs never slow your site down.<\/li>\n<li>Variable products are checked variation by variation.<\/li>\n<\/ul>\n\n<h4>Private by design<\/h4>\n\n<p>Everything runs on your own server. The plugin makes no external requests, sends no data anywhere (the optional weekly report goes only to the address you choose, through your site's own email), has no tracking and adds nothing to your shop's front end.<\/p>\n\n<h4>From the same team<\/h4>\n\n<p>When the check finds products without weights or dimensions, or images without alt text, it suggests our AI plugins that fill those in: <strong>BoxIntellect<\/strong> and <strong>AmazImg<\/strong>. The suggestions appear only on the Check My Shop page, next to the problem they solve, and you can hide them. A hidden suggestion only comes back after 90 days if the problem is still there, or sooner if it grows a lot. Every check and fix list works fully without them.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin. WooCommerce must be active.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Check My Shop<\/strong>. The first check starts by itself and runs in the background.<\/li>\n<li>Open a check's product list, fix the products, and watch the score go up.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20change%20my%20products%3F\"><h3>Does it change my products?<\/h3><\/dt>\n<dd><p>No. It only reads your product data and shows what's missing. You fix products in the normal product editor.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20store%3F\"><h3>Will it slow down my store?<\/h3><\/dt>\n<dd><p>No. Nothing runs on the front end. The full check runs in the background in batches of 200 products, and saving a product re-checks only that product.<\/p><\/dd>\n<dt id=\"does%20it%20check%20draft%20products%3F\"><h3>Does it check draft products?<\/h3><\/dt>\n<dd><p>Yes, by default, because stores often prepare products as drafts. You can turn that off on the Settings tab of the Check My Shop page.<\/p><\/dd>\n<dt id=\"how%20is%20the%20score%20calculated%3F\"><h3>How is the score calculated?<\/h3><\/dt>\n<dd><p>Each product starts at 100 and loses 25 points for each critical issue, 10 for each warning and 2 for each tip (never below 0). The store score is the average of all checked products. A is 90 or more, B 75, C 60, D 40, F below.<\/p><\/dd>\n<dt id=\"can%20i%20turn%20a%20check%20off%20or%20add%20my%20own%3F\"><h3>Can I turn a check off or add my own?<\/h3><\/dt>\n<dd><p>Yes, with the <code>cathc_checks<\/code> filter. The minimum image size can be changed with <code>cathc_min_image_size<\/code>, the limits for large image files with <code>cathc_max_image_bytes<\/code> and <code>cathc_max_image_pixels<\/code>, and the checked product statuses with <code>cathc_product_statuses<\/code>.<\/p><\/dd>\n<dt id=\"can%20it%20email%20me%20a%20report%3F\"><h3>Can it email me a report?<\/h3><\/dt>\n<dd><p>Yes. Turn on the weekly report on the Settings tab of the Check My Shop page. It goes to the site's admin email, or to any address you enter, through WordPress's normal email. If your site can't send email, an SMTP plugin fixes that.<\/p><\/dd>\n<dt id=\"does%20it%20send%20my%20data%20anywhere%3F\"><h3>Does it send my data anywhere?<\/h3><\/dt>\n<dd><p>No. See \"Private by design\" above.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>The duplicate title check also finds titles that differ only in spaces, punctuation, accents or capitals, like \"Blue T-Shirt\" and \"blue t shirt\", a common sign of a product imported twice. The other title is shown, so you can see the difference.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Find products with missing or broken data: weights, dimensions, images, alt text, SKUs, GTINs. One score, clear fix lists.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/389902","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=389902"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/m1sh0u"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=389902"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=389902"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=389902"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=389902"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=389902"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=389902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}