{"id":501976,"date":"2026-11-06T14:51:44","date_gmt":"2026-11-06T11:51:44","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=501976"},"modified":"2026-11-06T14:51:44","modified_gmt":"2026-11-06T11:51:44","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=501976","title":{"rendered":"\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f e-Commerce \u043d\u0430 WooCommerce: \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f e-Commerce \u043d\u0430 WooCommerce: \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, Geo-SEO \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0435\u043a<\/h2>\n<p>\u0412 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b WordPress \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043e\u043b\u0433\u043e\u0432\u0435\u0447\u043d\u043e\u0441\u0442\u044c, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044e. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u0443\u044e, \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 \u043d\u0435\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u0428\u0430\u0431\u043b\u043e\u043d <a href=\"https:\/\/gplwppass.com\/product\/milano-theme\/\" rel=\"noopener nofollow\">Milano \u2013 Multipurpose WooCommerce WordPress Theme<\/a> \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432: \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043c\u0430\u043a\u0435\u0442\u043e\u0432 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0438 \u0433\u0438\u0431\u043a\u0438\u043c \u0442\u043e\u0447\u043a\u0430\u043c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u043d\u0430 \u0431\u0430\u0437\u0435 \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u044b \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u043f\u0438\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0434\u0430\u0436\u0438, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0432\u044b\u0434\u0430\u0447\u0435 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043e\u043d\u0430\u0445, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438: \u043e\u0442 \u0440\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0434\u043e Geo-Targeting \u043b\u043e\u0433\u0438\u043a\u0438, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 <a href=\"http:\/\/Schema.org\" rel=\"noopener nofollow\">Schema.org<\/a> \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Nginx\/Redis.<\/p>\n<hr\/>\n<h3>1. \u0420\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445: \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u043d\u0430 HPOS \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 WooCommerce \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u0437\u0430\u043a\u0430\u0437\u044b \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (<code>wp_posts<\/code> \u0438 <code>wp_postmeta<\/code>), \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u043b\u0430\u0432\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0440\u043e\u0441\u0442\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u043e\u0431\u044a\u0435\u043c\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0431\u043e\u043b\u0435\u0435 10 000 SKU \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u043a\u0430\u0437\u0430\u0445 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 <code>postmeta<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 (row lock) \u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0421\u0423\u0411\u0414.<\/p>\n<h4>\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f High-Performance Order Storage (HPOS)<\/h4>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Milano \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 (COT \u2014 Custom Order Tables). \u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (<code>wp_wc_orders<\/code>, <code>wp_wc_order_addresses<\/code>, <code>wp_wc_order_operational_data<\/code>) \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0431\u0430\u0437\u0443:<\/p>\n<pre><code class=\"php\">\/** * \u0414\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 High-Performance Order Storage (HPOS) * \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 functions.php \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0439 \u0442\u0435\u043c\u044b Milano *\/add_action( 'before_woocommerce_init', function() {    if ( class_exists( '\\Automattic\\WooCommerce\\Utilities\\FeaturesUtil' ) ) {        \\Automattic\\WooCommerce\\Utilities\\FeaturesUtil::declare_compatibility(             'custom_order_tables',             __FILE__,             true         );    }} );<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<h4>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432<\/h4>\n<p>\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 (\u0440\u0430\u0437\u043c\u0435\u0440, \u0446\u0432\u0435\u0442, \u0431\u0440\u0435\u043d\u0434\u044b) \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0442\u044f\u0436\u0435\u043b\u044b\u0435 <code>JOIN<\/code>-\u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 MariaDB\/MySQL 8 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0444\u0430\u0441\u0435\u0442\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a:<\/p>\n<pre><code class=\"sql\">-- \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0442\u043e\u0432\u0430\u0440\u043e\u0432ALTER TABLE wp_postmeta ADD INDEX idx_post_meta_lookup (meta_key(32), post_id, meta_value(64));-- \u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u0438 \u0441\u0432\u044f\u0437\u043e\u043a \u0442\u0430\u043a\u0441\u043e\u043d\u043e\u043c\u0438\u0439ALTER TABLE wp_term_relationships ADD INDEX idx_object_term_order (object_id, term_taxonomy_id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<hr\/>\n<h3>2. \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f Core Web Vitals (LCP, INP, CLS)<\/h3>\n<p>\u041c\u043d\u043e\u0433\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043c\u044b \u043e\u0441\u043d\u0430\u0449\u0435\u043d\u044b \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438, \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u043c\u0438 \u043e\u043a\u043d\u0430\u043c\u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u0438 Ajax-\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u044d\u0442\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0441\u0430\u0439\u0442 \u0442\u0435\u0440\u044f\u0435\u0442 \u0431\u0430\u043b\u043b\u044b \u0432 Google PageSpeed, \u0447\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0432\u044b\u0434\u0430\u0447\u0435.<\/p>\n<h4>\u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 (INP \u0438 LCP)<\/h4>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 <strong>INP (Interaction to Next Paint)<\/strong> \u0432 WooCommerce \u2014 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043b\u0438\u0448\u043d\u0438\u0445 JS-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041c\u044b \u0432\u044b\u0431\u043e\u0440\u043e\u0447\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u0447\u0435\u043a\u0430\u0443\u0442\u0443 \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 <code>wc-cart-fragments<\/code>, \u0437\u0430\u043c\u0435\u043d\u044f\u044f \u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u043f\u0440\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u0432\u0430\u0440\u0430:<\/p>\n<pre><code class=\"php\">\/** * \u0421\u0435\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0445\u043e\u043b\u043e\u0441\u0442\u044b\u0445 AJAX-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 *\/function technical_optimize_frontend_scripts() {    \/\/ \u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0438\u043b\u0435\u0439 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0431\u043b\u043e\u043a\u043e\u0432 WooCommerce, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u043d\u0434\u0435\u0440    wp_dequeue_style( 'wc-blocks-style' );    wp_dequeue_style( 'wc-blocks-vendors-style' );    \/\/ \u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043b\u0438 \u043f\u043e\u0441\u0442 \u0431\u043b\u043e\u0433\u0430 \u2014 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u043c e-commerce \u044f\u0434\u0440\u043e    if ( ! is_woocommerce() &amp;&amp; ! is_cart() &amp;&amp; ! is_checkout() &amp;&amp; ! is_account_page() ) {        wp_dequeue_script( 'wc-cart-fragments' );        wp_dequeue_script( 'woocommerce' );        wp_dequeue_script( 'wc-add-to-cart' );        wp_dequeue_style( 'woocommerce-general' );        wp_dequeue_style( 'woocommerce-layout' );        wp_dequeue_style( 'woocommerce-smallscreen' );    }}add_action( 'wp_enqueue_scripts', 'technical_optimize_frontend_scripts', 99 );<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u0437\u0438\u043d\u0430 \u0432 \u0448\u0430\u043f\u043a\u0435 \u0441\u0430\u0439\u0442\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f, <code>cart-fragments<\/code> \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0438\u0436\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:<\/p>\n<pre><code class=\"javascript\">\/** * \u041b\u0435\u043d\u0438\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u0440\u0437\u0438\u043d\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (Hover\/Click) *\/document.addEventListener('DOMContentLoaded', () =&gt; {    const miniCartTrigger = document.querySelector('.header-cart-toggle, .milano-mini-cart-trigger');    let fragmentsLoaded = false;    if (miniCartTrigger) {        const loadFragmentsOnDemand = () =&gt; {            if (fragmentsLoaded) return;            fragmentsLoaded = true;            \/\/ \u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0448\u0442\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f WooCommerce \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432            if (window.jQuery) {                window.jQuery(document.body).trigger('wc_fragment_refresh');            }                        miniCartTrigger.removeEventListener('mouseenter', loadFragmentsOnDemand);            miniCartTrigger.removeEventListener('touchstart', loadFragmentsOnDemand);        };        miniCartTrigger.addEventListener('mouseenter', loadFragmentsOnDemand, { passive: true });        miniCartTrigger.addEventListener('touchstart', loadFragmentsOnDemand, { passive: true });    }});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>\u041b\u0438\u043a\u0432\u0438\u0434\u0430\u0446\u0438\u044f \u0441\u0434\u0432\u0438\u0433\u043e\u0432 \u043c\u0430\u043a\u0435\u0442\u0430 (CLS)<\/h4>\n<p>\u0412 \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0442\u043a\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0442\u043e\u0432\u0430\u0440\u0430 \u0441\u0434\u0432\u0438\u0433 \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438\u0437-\u0437\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0431\u0435\u0439\u0434\u0436\u0435\u0439 (\u00abSale\u00bb, \u00ab\u041d\u043e\u0432\u0438\u043d\u043a\u0430\u00bb) \u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a. \u0414\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0441\u043a\u0430\u0447\u043a\u043e\u0432 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 <code>aspect-ratio<\/code> \u0438 CSS-\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"css\">\/* \u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 *\/.woocommerce-product-gallery__image,.product-thumbnail-container {    aspect-ratio: 3 \/ 4;    position: relative;    background-color: #f2f3f5;    overflow: hidden;    contain: layout paint;}.woocommerce-product-gallery__image img,.product-thumbnail-container img {    width: 100%;    height: 100%;    object-fit: cover;    display: block;}\/* \u0418\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u0441\u0442\u0438\u043b\u0435\u0439 \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 *\/.products.columns-4 .product {    content-visibility: auto;    contain-intrinsic-size: 0 420px;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<hr\/>\n<h3>3. Geo-Targeting, \u043c\u0443\u043b\u044c\u0442\u0438\u044f\u0437\u044b\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u044d\u0448<\/h3>\n<p>\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u043b\u043e\u0436\u043d\u0435\u0439\u0448\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u0434\u043b\u044f \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0445 \u0438\u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u044b\u043d\u043a\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0446\u0435\u043d, \u0432\u0430\u043b\u044e\u0442 \u0438 \u0441\u0440\u043e\u043a\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u043e \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (Full Page Caching).<\/p>\n<h4>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d: Edge GeoIP + Dynamic Fragment Injection<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0443 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 PHP \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u0441\u0430\u0439\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 Varnish, Nginx FastCGI Cache \u0438\u043b\u0438 Cloudflare. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 HTML-\u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043b\u0438 \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c.<\/p>\n<h3>Nginx \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c GeoIP2:<\/h3>\n<pre><code class=\"nginx\"># \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u044b \u043f\u043e IP \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 MaxMind GeoIP2geoip2 \/usr\/share\/GeoIP\/GeoLite2-Country.mmdb {    auto_reload 15m;    $geoip2_data_country_code default=US source=$remote_addr country iso_code;}# \u041f\u0440\u043e\u0431\u0440\u043e\u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0432 PHP-FPMfastcgi_param HTTP_GEOIP_COUNTRY_CODE $geoip2_data_country_code;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432 WordPress \u0431\u0435\u0437 \u0441\u0431\u0440\u043e\u0441\u0430 \u043a\u044d\u0448\u0430:<\/h3>\n<pre><code class=\"php\">\/** * \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 *\/function technical_apply_geo_pricing_rules() {    \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 CDN \u0438\u043b\u0438 Nginx GeoIP    $country_code = $_SERVER['HTTP_CF_IPCOUNTRY'] ?? $_SERVER['HTTP_GEOIP_COUNTRY_CODE'] ?? 'DEFAULT';        \/\/ \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0437\u043e\u043d\u044b \u043d\u0430\u043b\u043e\u0433\u043e\u043e\u0431\u043b\u043e\u0436\u0435\u043d\u0438\u044f\/\u0432\u0430\u043b\u044e\u0442\u044b \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0438    if ( ! is_admin() &amp;&amp; did_action( 'woocommerce_init' ) ) {        if ( 'DE' === $country_code || 'FR' === $country_code ) {            \/\/ \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u041d\u0414\u0421 \u0438 \u0432\u0430\u043b\u044e\u0442\u0443 EUR            add_filter( 'woocommerce_currency', function() { return 'EUR'; } );        } elseif ( 'KZ' === $country_code ) {            add_filter( 'woocommerce_currency', function() { return 'KZT'; } );        }    }}add_action( 'init', 'technical_apply_geo_pricing_rules' );<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<hr\/>\n<h3>4. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 Schema.org \u0434\u043b\u044f e-Commerce SEO<\/h3>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432 (Rich Results) \u0432 \u0432\u044b\u0434\u0430\u0447\u0435 Google \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0440\u043e\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0442\u043e\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438, \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u0445 (GTIN, MPN).<\/p>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <a href=\"http:\/\/Schema.org\" rel=\"noopener nofollow\">Schema.org<\/a>, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 WooCommerce, \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 <code>woocommerce_structured_data_product<\/code>, \u0432\u043d\u0435\u0434\u0440\u044f\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 <code>MerchantReturnPolicy<\/code> \u0438 <code>ShippingDetails<\/code>:<\/p>\n<pre><code class=\"php\">\/** * \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 JSON-LD \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 Product \u0434\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 Google Merchant 2026 *\/function technical_enhance_product_schema_json_ld( $markup, $product ) {    if ( ! is_a( $product, 'WC_Product' ) ) {        return $markup;    }    $product_id = $product-&gt;get_id();    \/\/ 1. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (GTIN-13 \/ EAN)    $gtin = get_post_meta( $product_id, '_custom_gtin', true );    if ( $gtin ) {        $markup['gtin13'] = esc_attr( $gtin );    }    \/\/ 2. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u0430 \u0438 \u0431\u0440\u0435\u043d\u0434    $markup['itemCondition'] = 'https:\/\/schema.org\/NewCondition';    $markup['brand'] = array(        '@type' =&gt; 'Brand',        'name'  =&gt; get_post_meta( $product_id, '_custom_brand_name', true ) ?: get_bloginfo( 'name' ),    );    \/\/ 3. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f    if ( isset( $markup['offers'] ) &amp;&amp; is_array( $markup['offers'] ) ) {        foreach ( $markup['offers'] as $index =&gt; $offer ) {            \/\/ \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 (30 \u0434\u043d\u0435\u0439, \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043f\u043e\u0447\u0442\u043e\u0439)            $markup['offers'][$index]['hasMerchantReturnPolicy'] = array(                '@type' =&gt; 'MerchantReturnPolicy',                'applicableCountry' =&gt; 'US',                'returnPolicyCategory' =&gt; 'https:\/\/schema.org\/MerchantReturnFiniteReturnWindow',                'merchantReturnDays' =&gt; 30,                'returnMethod' =&gt; 'https:\/\/schema.org\/ReturnByMail',                'returnFees' =&gt; 'https:\/\/schema.org\/FreeReturn'            );            \/\/ \u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0441\u0440\u043e\u043a\u0430\u0445 \u0438 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438            $markup['offers'][$index]['shippingDetails'] = array(                '@type' =&gt; 'OfferShippingDetails',                'shippingRate' =&gt; array(                    '@type' =&gt; 'MonetaryAmount',                    'value' =&gt; '0.00',                    'currency' =&gt; $offer['priceCurrency'] ?? 'USD',                ),                'deliveryTime' =&gt; array(                    '@type' =&gt; 'ShippingDeliveryTime',                    'handlingTime' =&gt; array(                        '@type' =&gt; 'QuantitativeValue',                        'minValue' =&gt; 0,                        'maxValue' =&gt; 1,                        'unitCode' =&gt; 'DAY'                    ),                    'transitTime' =&gt; array(                        '@type' =&gt; 'QuantitativeValue',                        'minValue' =&gt; 1,                        'maxValue' =&gt; 3,                        'unitCode' =&gt; 'DAY'                    )                )            );        }    }    return $markup;}add_filter( 'woocommerce_structured_data_product', 'technical_enhance_product_schema_json_ld', 10, 2 );<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<hr\/>\n<h3>5. \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0435\u043a: Nginx FastCGI Microcaching \u0438 Redis Object Cache<\/h3>\n<p>\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e TTFB (\u043c\u0435\u043d\u0435\u0435 150 \u043c\u0441) \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a PHP-\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0443.<\/p>\n<h4>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f Nginx FastCGI Cache \u0434\u043b\u044f WooCommerce<\/h4>\n<p>\u041f\u0440\u0438 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u044d\u0448 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435 \u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:<\/p>\n<pre><code class=\"nginx\"># \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u043a\u044d\u0448\u0430map $http_cookie $no_cache {    default 0;    ~*woocommerce_items_in_cart 1;    ~*wp_woocommerce_session 1;    ~*comment_author 1;    ~*wordpress_logged_in 1;}server {    server_name store.example.com;    root \/var\/www\/store\/public;    # \u0417\u043e\u043d\u0430 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f    set $skip_cache 0;    # POST-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 URL \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043a\u044d\u0448\u0430    if ($request_method = POST) {        set $skip_cache 1;    }    if ($query_string != \"\") {        set $skip_cache 1;    }    if ($request_uri ~* \"\/(cart|checkout|my-account|addons)\/\") {        set $skip_cache 1;    }    if ($no_cache = 1) {        set $skip_cache 1;    }    location ~ \\.php$ {        include fastcgi_params;        fastcgi_pass unix:\/run\/php\/php8.2-fpm.sock;        fastcgi_index index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        # \u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b FastCGI Cache        fastcgi_cache STORE_CACHE;        fastcgi_cache_valid 200 301 302 12h;        fastcgi_cache_use_stale error timeout updating invalid_header http_500;        fastcgi_cache_bypass $skip_cache;        fastcgi_no_cache $skip_cache;        # \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043a\u044d\u0448\u0430        add_header X-Cache-Status $upstream_cache_status;    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Redis Object Cache<\/h4>\n<p>\u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0434\u0440\u0430 WordPress \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Redis \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0444\u0430\u0439\u043b\u0435 <code>wp-config.php<\/code> \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u043a\u044d\u0448\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438 (non-persistent groups):<\/p>\n<pre><code class=\"php\">\/\/ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Redis Object Cache \u0432 wp-config.phpdefine( 'WP_REDIS_SCHEME', 'unix' );define( 'WP_REDIS_PATH', '\/var\/run\/redis\/redis-server.sock' );define( 'WP_REDIS_DATABASE', 0 );define( 'WP_REDIS_TIMEOUT', 1 );define( 'WP_REDIS_READ_TIMEOUT', 1 );\/\/ \u041f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u0441\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438 \u043a\u043e\u0440\u0437\u0438\u043ddefine( 'WP_REDIS_IGNORED_GROUPS', [    'counts',    'plugins',    'wc_session_id',    'woocommerce_items_in_cart'] );<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<hr\/>\n<h3>6. \u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a Production<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0443\u0434\u0438\u0442:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0426\u0435\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u043e\u0434 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f HPOS<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0431\u0435\u0437 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>WooCommerce &gt; \u0421\u0442\u0430\u0442\u0443\u0441 &gt; \u0424\u0443\u043d\u043a\u0446\u0438\u0438<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 (TTFB)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>&lt; 180 \u043c\u0441<\/code> (\u043a\u044d\u0448), <code>&lt; 450 \u043c\u0441<\/code> (\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">WebPageTest \/ cURL<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>UX &amp; \u041c\u0435\u0442\u0440\u0438\u043a\u0438<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Largest Contentful Paint (LCP)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>&lt; 2.0 \u0441<\/code> \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 (4G)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Chrome UX Report \/ PageSpeed<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0442\u043a\u0438<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Cumulative Layout Shift (CLS)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.00<\/code> \u2013 <code>0.05<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Google Search Console<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Interaction to Next Paint (INP)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>&lt; 200 \u043c\u0441<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">DevTools Performance Profiler<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c <a href=\"http:\/\/Schema.org\" rel=\"noopener nofollow\">Schema.org<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\">0 \u043e\u0448\u0438\u0431\u043e\u043a \/ 0 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0432 Rich Results Test<\/p>\n<\/td>\n<td>\n<p align=\"left\">Google Rich Results Test Tool<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Geo-SEO<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 <code>hreflang<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u043e\u0434\u0430\u043c ISO-639-1 \u0438 ISO-3166-1 alpha-2<\/p>\n<\/td>\n<td>\n<p align=\"left\">Screaming Frog SEO Spider<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u043a \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 Milano \u0432 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439, \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 e-Commerce \u0440\u0435\u0441\u0443\u0440\u0441, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0438 \u0442\u0440\u0430\u0444\u0438\u043a \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0433\u0435\u043e-\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u043e\u0442\u0437\u044b\u0432\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u0438\u0441\u043a\u0435.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1104522\/\">https:\/\/habr.com\/ru\/articles\/1104522\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f e-Commerce \u043d\u0430 WooCommerce: \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, Geo-SEO \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0435\u043a\u0412 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b WordPress \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043e\u043b\u0433\u043e\u0432\u0435\u0447\u043d\u043e\u0441\u0442\u044c, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044e. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u0443\u044e, \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 \u043d\u0435\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u0428\u0430\u0431\u043b\u043e\u043d Milano \u2013 Multipurpose WooCommerce WordPress Theme \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432: \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043c\u0430\u043a\u0435\u0442\u043e\u0432 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0438 \u0433\u0438\u0431\u043a\u0438\u043c \u0442\u043e\u0447\u043a\u0430\u043c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438.\u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u043d\u0430 \u0431\u0430\u0437\u0435 \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u044b \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u043f\u0438\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0434\u0430\u0436\u0438, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b \u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0432\u044b\u0434\u0430\u0447\u0435 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043e\u043d\u0430\u0445, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438: \u043e\u0442 \u0440\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0434\u043e Geo-Targeting \u043b\u043e\u0433\u0438\u043a\u0438, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 Schema.org \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Nginx\/Redis.1. \u0420\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445: \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u043d\u0430 HPOS \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 WooCommerce \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u0437\u0430\u043a\u0430\u0437\u044b \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (wp_posts \u0438 wp_postmeta), \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u043b\u0430\u0432\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0440\u043e\u0441\u0442\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u043e\u0431\u044a\u0435\u043c\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0431\u043e\u043b\u0435\u0435 10 000 SKU \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u043a\u0430\u0437\u0430\u0445 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 postmeta \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 (row lock) \u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0421\u0423\u0411\u0414.\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f High-Performance Order Storage (HPOS)\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Milano \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 (COT \u2014 Custom Order Tables). \u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (wp_wc_orders, wp_wc_order_addresses, wp_wc_order_operational_data) \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0431\u0430\u0437\u0443:\/** * \u0414\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 High-Performance Order Storage (HPOS) * \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 functions.php \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0439 \u0442\u0435\u043c\u044b Milano *\/add_action( &#8216;before_woocommerce_init&#8217;, function() {    if ( class_exists( &#8216;\\Automattic\\WooCommerce\\Utilities\\FeaturesUtil&#8217; ) ) {        \\Automattic\\WooCommerce\\Utilities\\FeaturesUtil::declare_compatibility(             &#8216;custom_order_tables&#8217;,             __FILE__,             true         );    }} );\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 (\u0440\u0430\u0437\u043c\u0435\u0440, \u0446\u0432\u0435\u0442, \u0431\u0440\u0435\u043d\u0434\u044b) \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0442\u044f\u0436\u0435\u043b\u044b\u0435 JOIN-\u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 MariaDB\/MySQL 8 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0444\u0430\u0441\u0435\u0442\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a:&#8212; \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0442\u043e\u0432\u0430\u0440\u043e\u0432ALTER TABLE wp_postmeta ADD INDEX idx_post_meta_lookup (meta_key(32), post_id, meta_value(64));&#8212; \u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u0438 \u0441\u0432\u044f\u0437\u043e\u043a \u0442\u0430\u043a\u0441\u043e\u043d\u043e\u043c\u0438\u0439ALTER TABLE wp_term_relationships ADD INDEX idx_object_term_order (object_id, term_taxonomy_id);2. \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f Core Web Vitals (LCP, INP, CLS)\u041c\u043d\u043e\u0433\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043c\u044b \u043e\u0441\u043d\u0430\u0449\u0435\u043d\u044b \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438, \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u043c\u0438 \u043e\u043a\u043d\u0430\u043c\u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u0438 Ajax-\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u044d\u0442\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0441\u0430\u0439\u0442 \u0442\u0435\u0440\u044f\u0435\u0442 \u0431\u0430\u043b\u043b\u044b \u0432 Google PageSpeed, \u0447\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0432\u044b\u0434\u0430\u0447\u0435.\u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 (INP \u0438 LCP)\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 INP (Interaction to Next Paint) \u0432 WooCommerce \u2014 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043b\u0438\u0448\u043d\u0438\u0445 JS-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041c\u044b \u0432\u044b\u0431\u043e\u0440\u043e\u0447\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u0447\u0435\u043a\u0430\u0443\u0442\u0443 \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 wc-cart-fragments, \u0437\u0430\u043c\u0435\u043d\u044f\u044f \u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e \u043f\u0440\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u0432\u0430\u0440\u0430:\/** * \u0421\u0435\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0445\u043e\u043b\u043e\u0441\u0442\u044b\u0445 AJAX-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 *\/function technical_optimize_frontend_scripts() {    \/\/ \u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0438\u043b\u0435\u0439 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0431\u043b\u043e\u043a\u043e\u0432 WooCommerce, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u043d\u0434\u0435\u0440    wp_dequeue_style( &#8216;wc-blocks-style&#8217; );    wp_dequeue_style( &#8216;wc-blocks-vendors-style&#8217; );    \/\/ \u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043b\u0438 \u043f\u043e\u0441\u0442 \u0431\u043b\u043e\u0433\u0430 \u2014 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u043c e-commerce \u044f\u0434\u0440\u043e    if ( ! is_woocommerce() &amp;&amp; ! is_cart() &amp;&amp; ! is_checkout() &amp;&amp; ! is_account_page() ) {        wp_dequeue_script( &#8216;wc-cart-fragments&#8217; );        wp_dequeue_script( &#8216;woocommerce&#8217; );        wp_dequeue_script( &#8216;wc-add-to-cart&#8217; );        wp_dequeue_style( &#8216;woocommerce-general&#8217; );        wp_dequeue_style( &#8216;woocommerce-layout&#8217; );        wp_dequeue_style( &#8216;woocommerce-smallscreen&#8217; );    }}add_action( &#8216;wp_enqueue_scripts&#8217;, &#8216;technical_optimize_frontend_scripts&#8217;, 99 );\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u0437\u0438\u043d\u0430 \u0432 \u0448\u0430\u043f\u043a\u0435 \u0441\u0430\u0439\u0442\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f, cart-fragments \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0438\u0436\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:\/** * \u041b\u0435\u043d\u0438\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u0440\u0437\u0438\u043d\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (Hover\/Click) *\/document.addEventListener(&#8216;DOMContentLoaded&#8217;, () =&gt; {    const miniCartTrigger = document.querySelector(&#8216;.header-cart-toggle, .milano-mini-cart-trigger&#8217;);    let fragmentsLoaded = false;    if (miniCartTrigger) {        const loadFragmentsOnDemand = () =&gt; {            if (fragmentsLoaded) return;            fragmentsLoaded = true;            \/\/ \u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0448\u0442\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f WooCommerce \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432            if (window.jQuery) {                window.jQuery(document.body).trigger(&#8216;wc_fragment_refresh&#8217;);            }                        miniCartTrigger.removeEventListener(&#8216;mouseenter&#8217;, loadFragmentsOnDemand);            miniCartTrigger.removeEventListener(&#8216;touchstart&#8217;, loadFragmentsOnDemand);        };        miniCartTrigger.addEventListener(&#8216;mouseenter&#8217;, loadFragmentsOnDemand, { passive: true });        miniCartTrigger.addEventListener(&#8216;touchstart&#8217;, loadFragmentsOnDemand, { passive: true });    }});\u041b\u0438\u043a\u0432\u0438\u0434\u0430\u0446\u0438\u044f \u0441\u0434\u0432\u0438\u0433\u043e\u0432 \u043c\u0430\u043a\u0435\u0442\u0430 (CLS)\u0412 \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0442\u043a\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0442\u043e\u0432\u0430\u0440\u0430 \u0441\u0434\u0432\u0438\u0433 \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438\u0437-\u0437\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0431\u0435\u0439\u0434\u0436\u0435\u0439 (\u00abSale\u00bb, \u00ab\u041d\u043e\u0432\u0438\u043d\u043a\u0430\u00bb) \u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a. \u0414\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0441\u043a\u0430\u0447\u043a\u043e\u0432 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 aspect-ratio \u0438 CSS-\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f:\/* \u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 *\/.woocommerce-product-gallery__image,.product-thumbnail-container {    aspect-ratio: 3 \/ 4;    position: relative;    background-color: #f2f3f5;    overflow: hidden;    contain: layout paint;}.woocommerce-product-gallery__image img,.product-thumbnail-container img {    width: 100%;    height: 100%;    object-fit: cover;    display: block;}\/* \u0418\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u0441\u0442\u0438\u043b\u0435\u0439 \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 *\/.products.columns-4 .product {    content-visibility: auto;    contain-intrinsic-size: 0 420px;}3. Geo-Targeting, \u043c\u0443\u043b\u044c\u0442\u0438\u044f\u0437\u044b\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u044d\u0448\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u043b\u043e\u0436\u043d\u0435\u0439\u0448\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u0434\u043b\u044f \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0445 \u0438\u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u044b\u043d\u043a\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0446\u0435\u043d, \u0432\u0430\u043b\u044e\u0442 \u0438 \u0441\u0440\u043e\u043a\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u043e \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (Full Page Caching).\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d: Edge GeoIP + Dynamic Fragment Injection\u0415\u0441\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0443 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 PHP \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u0441\u0430\u0439\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 Varnish, Nginx FastCGI Cache \u0438\u043b\u0438 Cloudflare. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 HTML-\u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043b\u0438 \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c.Nginx \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c GeoIP2:# \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u044b \u043f\u043e IP \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 MaxMind GeoIP2geoip2 \/usr\/share\/GeoIP\/GeoLite2-Country.mmdb {    auto_reload 15m;    $geoip2_data_country_code default=US source=$remote_addr country iso_code;}# \u041f\u0440\u043e\u0431\u0440\u043e\u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0432 PHP-FPMfastcgi_param HTTP_GEOIP_COUNTRY_CODE $geoip2_data_country_code;\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432 WordPress \u0431\u0435\u0437 \u0441\u0431\u0440\u043e\u0441\u0430 \u043a\u044d\u0448\u0430:\/** * \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 *\/function technical_apply_geo_pricing_rules() {    \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 CDN \u0438\u043b\u0438 Nginx GeoIP    $country_code = $_SERVER[&#8216;HTTP_CF_IPCOUNTRY&#8217;] ?? $_SERVER[&#8216;HTTP_GEOIP_COUNTRY_CODE&#8217;] ?? &#8216;DEFAULT&#8217;;        \/\/ \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0437\u043e\u043d\u044b \u043d\u0430\u043b\u043e\u0433\u043e\u043e\u0431\u043b\u043e\u0436\u0435\u043d\u0438\u044f\/\u0432\u0430\u043b\u044e\u0442\u044b \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0438    if ( ! is_admin() &amp;&amp; did_action( &#8216;woocommerce_init&#8217; ) ) {        if ( &#8216;DE&#8217; === $country_code || &#8216;FR&#8217; === $country_code ) {            \/\/ \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u041d\u0414\u0421 \u0438 \u0432\u0430\u043b\u044e\u0442\u0443 EUR            add_filter( &#8216;woocommerce_currency&#8217;, function() { return &#8216;EUR&#8217;; } );        } elseif ( &#8216;KZ&#8217; === $country_code ) {            add_filter( &#8216;woocommerce_currency&#8217;, function() { return &#8216;KZT&#8217;; } );        }    }}add_action( &#8216;init&#8217;, &#8216;technical_apply_geo_pricing_rules&#8217; );4. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 Schema.org \u0434\u043b\u044f e-Commerce SEO\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432 (Rich Results) \u0432 \u0432\u044b\u0434\u0430\u0447\u0435 Google \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0440\u043e\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0442\u043e\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438, \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u0445 (GTIN, MPN).\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 Schema.org, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 WooCommerce, \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 woocommerce_structured_data_product, \u0432\u043d\u0435\u0434\u0440\u044f\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 MerchantReturnPolicy \u0438 ShippingDetails:\/** * \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 JSON-LD \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 Product \u0434\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 Google Merchant 2026 *\/function technical_enhance_product_schema_json_ld( $markup, $product ) {    if ( ! is_a( $product, &#8216;WC_Product&#8217; ) ) {        return $markup;    }    $product_id = $product-&gt;get_id();    \/\/ 1. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (GTIN-13 \/ EAN)    $gtin = get_post_meta( $product_id, &#8216;_custom_gtin&#8217;, true );    if ( $gtin ) {        $markup[&#8216;gtin13&#8217;] = esc_attr( $gtin );    }    \/\/ 2. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u0430 \u0438 \u0431\u0440\u0435\u043d\u0434    $markup[&#8216;itemCondition&#8217;] = &#8216;https:\/\/schema.org\/NewCondition&#8217;;    $markup[&#8216;brand&#8217;] = array(        &#8216;@type&#8217; =&gt; &#8216;Brand&#8217;,        &#8216;name&#8217;  =&gt; get_post_meta( $product_id, &#8216;_custom_brand_name&#8217;, true ) ?: get_bloginfo( &#8216;name&#8217; ),    );    \/\/ 3. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f    if ( isset( $markup[&#8216;offers&#8217;] ) &amp;&amp; is_array( $markup[&#8216;offers&#8217;] ) ) {        foreach ( $markup[&#8216;offers&#8217;] as $index =&gt; $offer ) {            \/\/ \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 (30 \u0434\u043d\u0435\u0439, \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043f\u043e\u0447\u0442\u043e\u0439)            $markup[&#8216;offers&#8217;][$index][&#8216;hasMerchantReturnPolicy&#8217;] = array(                &#8216;@type&#8217; =&gt; &#8216;MerchantReturnPolicy&#8217;,                &#8216;applicableCountry&#8217; =&gt; &#8216;US&#8217;,                &#8216;returnPolicyCategory&#8217; =&gt; &#8216;https:\/\/schema.org\/MerchantReturnFiniteReturnWindow&#8217;,                &#8216;merchantReturnDays&#8217;&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-501976","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=501976"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501976\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=501976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=501976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=501976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}