So this is my approach:
1. Go to Woocommerce > Settings > Products and in Shop page remove the page – so its an empty field.
2. Create a Static Page for your Shop page.
Now you can build whatever layout you want.
To display the Category grid use this shortcode:
[product_categories]
Your product list:
[recent_products limit="12"]
You can add whatever else you want to that page.
3. One thing you will need to do is add the following PHP Snippet to your site:
function return_to_static_shop_page() {
return 'http://yourdomain.com/your-page/';
}
add_filter( 'woocommerce_return_to_shop_redirect', 'return_to_static_shop_page' );
And change the URL http://yourdomain.com/your-shop-page/
to your new static shop page. This will ensure any Return to Shop links that Woo generates will take you to your static page.