我接到一位客户的电话,他拥有一家销售工业油和润滑油的批发公司。 WooCommerce 上的目录 - 近一万七千个职位。 “Oleg,”他说,“六个月来,我们一直在尝试正常上传到 Yandex.Market。我们尝试了三个插件,聘请了一名自由职业者,他跪下写了一些代码,但提要不断崩溃,审核不接受,一半产品没有类别,1C 的价格会延迟一天。我们每天都在亏损。”我听了并想——这并不是一个独特的情况。我经常从不同的客户、不同的领域听到这样的说法。 Yandex.Market 是俄罗斯最大的价格聚合商,向其上传数据早已成为一项表面上看似简单,但实际上却变成噩梦的任务之一。
看起来 - 有什么这么复杂?您生成 YML 格式的 XML 文件,将 URL 上传到您的 Market 帐户,产品就会出现在搜索结果中。事实上,一切都完全不同了。 Yandex 的 YML 规范由数十个必填和推荐字段组成,每个字段都有自己的限制。类别应遵循市场树,而不是您的内部 WooCommerce 结构。产品变体必须以带有 group_id 的特殊格式提交。价格应该是当前的,而不是昨天的。图像可通过直接 URL 获取,无需重定向。送货和取货 - 按地区划分有具体条款和费用。如果出现任何问题,审核会拒绝提要,或者更糟糕的是,部分接受提要,您甚至不知道 17000 个产品中哪些产品实际展示给了客户,哪些产品悄悄地消失了。
我正在为 WooCommerce 开发 COS WP Woo 插件,Yandex.Market 的上传模块是我们根据客户的直接请求开始制作的模块之一。并不是因为我们想要另一个 YML feed 生成器插件 - 市场上已经有足够的插件了。但因为现有的没有一个能够同时解决整个复杂的问题:灵活的过滤、类别映射、对变体的支持、按计划自动更新、与 1C 集成,以及最重要的是,在将提要上传到市场并收到审核拒绝之前对其进行验证。让我们来看看它是如何运作的,以及为什么现有的解决方案通常无法满足要求。
什么是 YML Feed 以及为什么它存在如此多的问题
YML 格式 - Yandex 市场语言 - 是 Yandex 专门为加载产品而开发的 XML 扩展。这听起来很技术性,但本质上它只是一个描述您的目录的文件:商店名称、货币、类别树和一组产品报价(优惠)。每个报价都是一张产品卡,其中包含名称、价格、描述、URL、图像和一系列附加参数,例如制造商、原产国、条形码和特征。
问题在于“这是我的 WooCommerce 商店及其产品”和“这是市场的有效 YML 提要”之间存在巨大差距。 WooCommerce 将数据存储在自己的结构中 - 产品帖子类型、元字段、分类法、属性、变体作为子帖子。这些概念都没有在 YML 上一一对应。 WooCommerce 中的产品名称可能包含 HTML 标签或在 XML 中无效的特殊字符。 WooCommerce 中的类别是任意树,与 Yandex.Market 类别树不一致。价格可以为空(“应要求”的产品)、有折扣(销售价)、含税或不含税 - YML 需要一个具体数字。图像存储为附件 ID,并且必须将完整的 URL 插入到源中 - 并且该 URL 必须有效,没有损坏的链接,并且最好没有带尺寸的查询参数。
我见过其他插件生成的提要,其中一个文件中存在没有类别的产品、价格为零的产品、没有单个图像的产品以及描述为 15000 个字符的产品 - 尽管 Market 在 3000 个字符后切断了描述。从形式上来说,这是有效的 XML,甚至市场也会接受它。但一半的产品不会通过审核,店主将花费数周时间来弄清楚为什么在 17000 个职位中只有 2000 个出现在搜索结果中。这就是为什么 Feed 生成不仅仅是“将数据从一种格式转换为另一种格式”的问题。这是在数据进入 Yandex 之前对其进行过滤、清理、验证和丰富。
当我们在 COS WP Woo 中设计 Yandex Feed 模块时,我们立即决定采用不同的方法。不是“卸下所有东西然后祈祷”,而是“只卸下为市场准备好的东西,并展示需要改进的东西”。这是一个根本的区别,它影响整个架构。
让我们看看卸载过程中需要解决的具体任务以及我们如何处理每项任务。
YML 文件生成从商店设置开始 - 名称、URL、货币、公司。这些是很少更改的顶级参数,但必须包含在 feed 中。接下来是一个类别块。这是第一个严重问题开始的地方 - 将 WooCommerce 类别映射到 Yandex.Market 树上。市场有自己的数千个类别的分类法,而您的内部类别(如“工业油 → 液压油 → HLP”)与 Yandex 的预期不符。在市场中可能是“油和润滑油→液压油”,并且类别 ID 会完全不同。
老实说,很多插件只是按原样转储您的 WooCommerce 类别树。它有效 - Yandex 将接受您的类别。但产品不会以最佳方式分布,对它们的搜索会更差,并且您会在转化中损失。我们的方法是将每个 WooCommerce 类别映射到相应的 Yandex 类别。在模块设置中有一个映射部分,您可以在其中看到并排的两棵树 - 您的树和 Yandex 的树 - 只需将它们连接起来即可。您未映射的类别会使用您的原始名称上传,并且模块会用警告标记它们:“未映射到 Yandex 类别 - 产品可能无法准确分类。”这不是错误,提要可以工作,但至少您知道可以改进哪些内容。
接下来是问题的核心 - 产品供应。每个 WooCommerce 产品都会转化为 YML 中的一个或多个报价元素。一个简单的产品 - 一个优惠。可变产品 - 每个变体都有一个单独的报价,通过 group_id 统一。这是我与客户经常遇到的第二个大问题的开始。
WooCommerce 将变体存储为子帖子 (post_type = Product_variation),并且它们有自己的继承逻辑。变体可以有自己的价格,也可以继承其父价格。它可能有自己的描述,也可能没有——然后采用父级的描述。图像 - 如果变体有自己的图库,则采用它,如果没有,则采用父级的图库。 SKU - 类似。重量和尺寸相同。需要沿着继承链检查每个字段,这不是一项简单的任务。
许多 Feed 生成器只是直接获取变化数据,而不检查父级的回退。因此,报价出现在提要中,没有描述、没有图像或没有价格 - 因为对于特定变体,此数据未填写,它是从父级继承的,但插件不知道它。我们正确处理整个继承链,并且提要中的每个报价都保证具有所有必填字段。
还有一个很少有人考虑到的细微差别。 Yandex.Market 预计一种产品的变体在特定参数(颜色、尺寸、体积)上会有所不同。并且这些参数必须在报价中指定为 param 元素。简单地为每个变体生成不同的 URL 是不够的 - 您需要清楚地显示它们有何不同。我们的模块会自动检测区分变体的属性,并将它们作为参数添加到 feed 中。如果您的产品“液压油 HLP 46”的容量不同 - 5 升、20 升、200 升 - 那么在 Feed 中将出现三个带有 group_id 的报价,“Volume”参数的值分别为 5、20 和 200。市场会明白这是一种不同包装的产品,并会正确地展示它们。
过滤:为什么不应上传整个目录
现在让我们来谈谈过滤 - 这也许是区分认真的卸载模块和业余脚本的方面。任何店主的第一反应就是把所有东西都卸下来。一万七千个产品?让我们把一万七千人全部送到市场吧!越多越好,对吧?
不,不正确。我会解释原因。 Yandex.Market 不是一个店面,而是一个竞争的聚合器。您为产品的每次点击付费。如果 Feed 中存在缺货商品,买家会点击并转到您的网站,看到“缺货”并离开。您为点击付费,但没有获得销售。如果饲料中有一种产品的价格为每罐油 150 卢布,这显然是一个错误,但买家会点击,然后留下负面评论。如果 Feed 中的产品没有描述且没有图像,它根本不会转化,但会占用 Feed 中的空间,并会影响您商店在 Yandex 眼中的整体质量评级。
因此,过滤不是可有可无,而是必须具备。在我们的模块中,您可以根据多个参数配置过滤器,我将详细讨论每个参数。
按类别过滤是最明显的。您可以选择要在 Feed 中包含哪些 WooCommerce 类别以及要排除哪些类别。典型场景:您有一个类别“服务”或“已使用” - 它们无法上传到市场或不切实际。或者您有一个“新商品”类别,该类别与其他类别中的产品重复,并且您不希望 Feed 中出现重复项。您可以包含特定类别(白名单)或排除特定类别(黑名单) - 这对于您的目录大小来说更方便。
按标签过滤的工作原理类似。在实践中,我们的客户经常使用 WooCommerce 标签进行内部标记:“不适用于市场”、“季节性”、“清算”、“溢价”。如果您将标签添加到排除项,则带有此标签的所有产品都不会包含在 Feed 中。这比在类别之间移动产品更方便,特别是当需要暂时从市场中删除同一产品而不影响其在网站目录中的位置时。
按可用性状态过滤可能是最重要的。这里有三个选项。您只能上传有库存的产品 - 这是最安全的模式,您只需为实际可以销售的产品的点击付费。您可以上传库存产品和“按订单”(延期交货)产品 - 如果您知道如何快速按订单交付货物并希望满足更多请求。您可以上传所有内容,包括丢失的内容 - 但提要将具有 available="false" 属性,并且市场会将它们显示为“缺货”,这对于在竞争性查询的搜索结果中保持位置非常有用。
按价格范围过滤可以避免您上传错误数据。您设置最低和最高价格。价格为 0 卢布或 1 卢布的产品是明显的数据错误,不会包含在 Feed 中。售价1000万卢布的产品也极有可能是一个错误。我看到一份目录,由于 1C 的进口失败,一些产品的价格以戈比而不是卢布列出——每罐石油 1 卢布 50 戈比。如果没有价格过滤器,这些商品就会进入市场,后果将是令人不快的。
还有基于强制数据的存在的过滤 - 这不是单独的设置,而是验证逻辑的一部分。没有名称、没有价格或至少没有一张图像的产品会自动从提要中排除,并最终出现在模块仪表板上的“问题产品”列表中。稍后,当我们进行验证时,我们将讨论这个问题。
所有这些过滤器都组合在一起。您可以说:“选择 A、B 和 C 类,排除带有“不适合市场”标签的产品,仅排除库存产品,价格在 100 至 500,000 卢布之间。”比方说,在您的 17000 个头寸中,有 12000 个头寸最终会出现在 Feed 中——正是那些准备好放入市场并实际转换的头寸。
交付、调度以及与 1C 的集成
一个单独的大主题是 Feed 中的递送和取货设置。 Yandex.Market 允许您直接在 YML 中指定交货条款,这极大地影响了您的产品在搜索结果中的定位。买家按交付方式、时间、成本进行筛选 - 如果您没有填写这些数据,您就会被排除在搜索查询的很大一部分之外。
在我们的模块中,交付设置在两个级别上工作。全局级别是整个商店的默认条件。您指定交货成本、时间(天数)、区域 - 这些参数适用于所有产品,除非被覆盖。这是商店部分中的交付选项元素。第二个层次是特定产品或类别的个别条件。重型产品(200 升桶油)的运输成本与 5 升罐不同。您可以按类别或重量范围设置规则,模块将自动为每个报价设置正确的条件。
与皮卡相同的事情 - 皮卡。如果您有多个接送点,请全部注明,并且每个点可以有自己的营业时间。馈送将包含带有每个点的正确数据的出口元素。这对于拥有多个仓库的区域性公司尤其重要——买家看到他们可以在自己的城市提货,转化率就会增加。
我知道很多人会想:“好吧,那我就在市场账户中设置交割吧。”是的,你可以。但如果直接在 feed 中指定交货条款,它们会与其余数据一起自动更新。无需前往您的帐户并手动更改费率。我们提高了运输成本 - 在模块设置中更改了它 - 下一代提要已经包含新价格。对于采用动态费率的公司来说,这可以每月节省大量的手动工作时间。
现在关于更新时间表 - 这就是“设置后忘记”与“我不断手动监控和重新生成”的区别。 Yandex.Market 建议每天至少更新一次您的 Feed,如果您的价格或可用性频繁变化,则每隔几个小时更新一次。如果提要已过时,市场可能会显示过时的价格或缺货的产品。这会导致负面评论和商店评级下降。
我们的模块使用 Action Scheduler,它与 WooCommerce 满足其自身需求的后台任务引擎相同。您设置一个时间表:每小时、每两个小时、每六个小时、每天一次 - 模块会在后台自动重新生成提要。不会阻塞网站或减慢访问者的速度。对于包含 17000 个位置的目录,生成时间从三十秒到几分钟不等,具体取决于服务器和变体数量。操作调度程序会异步处理此过程,即使生成需要更长的时间,站点也会继续照常工作。
这里我们来与 1C 集成 - 在我看来,这是单个插件相对于一组单独解决方案的关键优势。如果您将我们的集成模块与 1C 一起使用(通过 OData API 工作,而不是通过过时的 CommerceML),则 1C 中的价格和余额会自动转到 WooCommerce - 并从那里转到 YML feed。该链看起来像这样:经理在 1C 中更改价格 → OData 连接器通过 Webhook 或按计划捕获更改 → 在 WooCommerce 中更新产品价格 → 下一代提要包括当前价格。这一切都在没有人为干预的情况下发生。
为什么这很重要?因为替代方案是两个独立的插件(一个用于 1C,另一个用于 Market),它们彼此一无所知。 1C 插件在凌晨两点更新价格,而 Market 插件在早上 6 点重新生成 feed - 但这些事件之间已经过去了四个小时,如果有人当时在 Market 中以旧价格购买了产品,就会遇到问题。使用单个插件,您可以在与 1C 同步完成后立即设置提要生成 - 一个操作通过操作调度程序启动另一个操作。该链是封闭的,并且源始终包含最新数据。
我记得一个销售机油的客户的案例。他有两个独立的插件 - 一个用于与 1C 集成,另一个用于生成提要。它们在 cron 任务级别发生冲突,因为它们都使用 wp_cron 而 WordPress 试图同时运行这两个任务。结果,提要是用一半的更新数据生成的 - 一些产品已经有了 1C 的新价格,一些仍然有旧价格。市场上同一产品在不同的报价中表现出不同的价格。客户收到顾客的投诉,直到我们整理链条后才明白问题出在哪里。使用单个模块,此类冲突根本不会发生 - 所有任务都通过一个操作调度程序进行协调。
另外,我想谈谈剩菜。对于市场来说,标记为“有库存”的产品实际上有库存是至关重要的。如果买家订购了产品而您无法发货,Market 会降低商店的评级,甚至屏蔽该产品。当余额从 1C 同步时,馈送模块在生成时自动将其考虑在内。余额为零的产品可以完全从 Feed 中排除(如果配置了按可用性过滤)或标记为不可用。如果您在 1C 中有多个仓库 - 基本、营销、Katana - 该模块会汇总您在同步设置中指定的所有仓库的余额并使用最终数字。不仅仅是“是/否”,而是市场也可以用于排名的真实数字。
定价是使用不同插件时经常出现问题的另一件事。 1C 中可以有多种价格类型:“零售”、“批发”、“零售站点”、“购买”。对于市场,您需要一个特定的产品 - 您通过网站向零售客户销售的产品。我们的 1C 模块允许您指定在 WooCommerce 常规价格上映射的价格类型,并且相同的价格会进入 Feed。如果您有折扣价(促销价),它也会进入 Feed,并且市场将在当前价格旁边显示旧价格。这会在视觉上吸引买家并提高您的报价的点击率。
验证:在 Yandex 之前发现问题
现在来说说我认为最被低估的功能之一 - 发送前进行提要验证。大多数插件都会生成一个提要,仅此而已。然后将其上传到市场并等待审核结果。如果出现问题,您会在几个小时或几天后收到错误,修复它,重新生成它,再次下载,再次等待。如果您有大量目录并且市场审核很忙,则一个“固定检查”周期可能需要一周时间。
我们已将验证直接内置到模块中。每次生成 Feed 后,该模块都会检查所有报价并检查它们是否符合 Yandex.Market 要求。不仅仅是“XML 是否有效”,而是对每个产品进行有意义的检查。检查的是标题不为空或太长,价格为正且在合理范围内,至少有一张图片且图片 URL 可用,描述不超过字符数限制,类别指定,产品 URL 有效并指向现有页面。对于变化,检查 group_id 和区分参数的存在。对于交货的货物 - 注明条款和费用。
验证结果直接显示在 WooCommerce 管理面板的 Yandex Feed 模块仪表板上。您会看到三组:已成功验证(绿色)、有警告(黄色)和有错误(红色)。对于每个有问题的产品,都会显示具体原因 - “无图像”、“价格为零”、“描述超过 3000 个字符”、“市场没有可以用作参数的单一属性。”您可以单击产品,转到 WooCommerce 中的卡片并立即解决问题,而不是在 Market 拒绝您的 Feed 后解决。
您知道最常见的警告是什么吗? “该图像没有替代文字。” Yandex.Market 不要求提要中的图像使用替代文本,但建议这样做。如果您拥有的 17000 个产品中,有 12000 个没有替代文本,那么您不仅要考虑 Feed,还要考虑整个网站的 SEO。顺便说一句,COS WP Woo 有一个使用 AI 批量生成替代文本的模块 - 您可以在一次启动中解决这个问题。
另一个常见问题是重复。如果同一产品属于两个类别并且都包含在过滤器中,则该产品可以在 Feed 中出现两次。我们的模块通过产品 ID 跟踪唯一性,并确保每个产品(或变体)在 Feed 中准确呈现一次。在 Yandex 看来,重复是导致节制问题和 Feed 质量下降的直接途径。
我在其他地方没有见过的另一件事是提要预览。在复制源 URL 并将其粘贴到市场仪表板中之前,您可以直接在浏览器中以可读格式查看前 N 个产品报价。不是原始 XML,而是结构化表格:标题、价格、类别、图像数量、可用性、参数。这使您可以快速验证您的 feed 是否符合您的预期,而无需在 head 或第三方验证器中解析 XML 文件。
值得单独提及的是 Feed 大小。对于包含 17000 个具有变化的位置的目录,YML 文件的大小可能达到数十兆字节。 Yandex.Market 接受高达 500 MB 的文件,因此这通常不是问题,但下载时间确实很重要。市场定期在指定的 URL 检索提要 - 如果您的服务器提供文件缓慢或超时,则数据更新将被延迟。我们的模块生成一个静态文件并直接通过 Nginx/Apache 提供服务,而不通过 PHP - 这尽可能快并且不会加载服务器。
我意识到这听起来像是一堆只有开发人员才需要的技术细节。但事实上,正是这些细节决定了您上传到市场的操作是否可以在没有您干预的情况下稳定运行数月,或者是否需要持续的手动控制。我们的目标是第一个选项 - 设置一次,它就可以工作。源会更新,价格会更新,新产品会添加,那些从销售中删除的产品会消失,验证会在问题进入市场之前发现问题。
产品参数及报价结构
一个值得关注的单独主题是处理 Feed 中的产品参数。 Yandex.Market 积极使用参数(param 元素)进行分面过滤和产品比较。如果您的油具有指定的粘度、闪点、基础类型(矿物、合成、半合成) - 买家可以直接在市场结果中按这些参数过滤产品。这会显着影响转化率,因为买家准确地看到了他需要的东西,而不是包含一万七千件商品的整个目录。
在 WooCommerce 中,产品参数存储为属性(分类法,如 pa_viscosity、pa_base-type)或元字段(如果您使用自定义字段)。我们的模块自动将 WooCommerce 属性映射到 YML param 元素。您可以自定义要在 Feed 中包含哪些属性以及不包含哪些属性。例如,买家不需要内部属性“1C 代码”——可以将其排除。然后“粘度”、“体积”、“制造商”- 打开。
对于每个属性,您可以指定将在市场中显示的名称。如果在 WooCommerce 中,该属性称为 pa_viscosity-class,对于买家来说,它是“SAE 粘度等级” - 您在映射中设置一个人类可读的名称,它将以这种形式准确地出现在提要中。市场将显示“SAE 粘度等级:5W-30”——对于买家和搜索过滤器来说都很清楚。
如果您使用我们的自定义字段模块(ACF 替换),则自定义字段中的数据也可以作为参数包含在 Feed 中。假设您有一个带有 GOST 编号的自定义字段“GOST 证书” - 它可以成为 YML 中的参数。或“应用温度范围” - 从零下四十度到+一百二十度。这些都丰富了市场上的产品名片,增强了买家的信心。
我在实践中注意到一个有趣的模式:提要中具有五个或更多参数的产品比具有一两个参数的产品获得的点击次数明显更多。市场喜欢详细的卡片 - 它们提供更多的过滤选项,并且 Yandex 将它们排名更高。因此,如果您有数据,请使用它。在 WooCommerce 中(或在 1C 中,从它们同步的地方)填写属性,模块将自动将它们上传到 feed。每个完成的参数都会为您的产品的可见性带来一点好处。
现在介绍一下整个报价结构。 YML 支持多种报价类型 - 标准 (type=vendor.model)、简化和自定义。我们使用简化类型作为默认值,因为它最灵活并且适合大多数产品。但是,如果您的产品明确划分为制造商(供应商)和型号 - 例如,“Shell Helix Ultra 5W-40”,其中 Shell 是供应商,Helix Ultra 5W-40 是型号 - 您可以切换到供应商.型号类型。市场将更好地构建信息,并将能够对同一制造商的产品进行分组。
供应商取自 WooCommerce 属性或自定义字段 - 您可以在映射设置中指定它的确切来源。原产国 (country_of_origin) - 类似。条形码 - 来自元字段或属性。我们的模块不会强迫您将数据存储在任何特定字段中 - 它会适应您的数据结构,而不是相反。
还有一点经常被忽略 - Feed 中的产品 URL。看来我们只是获取永久链接并插入它。但URL必须是绝对的,使用https协议,没有不必要的查询参数,并且必须指向一个实际的页面。对于变体,URL 必须包含选择特定变体的参数。我们的模块会为每种情况生成正确的 URL,包括处理多语言网站(如果您使用 WPML 或 Polylang)和 IDN 域(例如 butter.site,在 URL 中变成 xn--80aa6ac0a.xn--80aswg)。
说到图像。市场每个报价最多接受十张图片。我们上传产品的主图片以及图库中的所有图片,但不超过十张。如果图像 URL 指向带有调整大小查询参数的图像(就像 CDN 插件经常做的那样),我们会采用不带参数的原始 URL - 它更可靠。我们检查 URL 是否返回 HTTP 200 而不是 404 - 图像链接损坏是产品被审核拒绝的最常见原因之一。
让我们讨论一下 feed 启动并运行后会发生什么。因为定制占业务的百分之五十。第二个五十是监测和适应。市场不断改变其要求,添加新的必填字段并加强检查。您的目录也会存在 - 新产品出现,旧产品被删除,价格和描述发生变化。 Feed 应自动反映所有这些变化,无需人工干预。
在 Yandex Feed 模块的仪表板上,我们显示了关键指标:Feed 中有多少产品、最后一代是什么时候、花了多长时间、是否有任何错误或警告、文件大小是多少。如果出现问题 - 例如,生成因错误而失败或提要中的产品数量急剧减少 - 您将看到一条警告。产品数量急剧减少通常意味着数据出现问题:大规模价格重置、类别删除、1C 同步问题。最好从插件的仪表板中了解这一点,而不是从在市场上找不到您的产品的买家那里了解这一点。
我思考了很长时间是否有必要通过电子邮件添加通知 - 例如,“您的提要已生成,这是统计信息。”我们决定暂时不添加它,因为它很快就会变成垃圾邮件,而每个人都会忽略它。相反,WooCommerce 管理面板的仪表板上有一个视觉指示器。如果您每天至少登录一次管理区域(谁不会?),您将看到提要的状态。
我想告诉您另一种情况,这种情况发生的频率比我们想象的要高 - WooCommerce 和 Market 之间的数据冲突。您上传了提要,市场接受了它,产品出现在搜索结果中。一周后,您更新了 WooCommerce 中的产品描述,使其更长、更详细。提要被重新生成,市场更新了数据 - 突然间,产品停止了审核,因为新的描述包含禁止的单词或超出了字符限制。产品从显示屏上消失,你不明白发生了什么。我们的验证在生成过程中捕获此类更改并显示警告:“产品 X:描述已从 2800 个字符增加到 3500 个字符,超出了市场限制。”您可以在问题得到审核之前缩短描述。
这是实践中的另一个有趣的故事。对于一位汽车化学品制造商客户来说,该饲料在三个月内运行良好。然后八百件货物一下子就“掉”了。我们开始调查它 - 结果发现营销人员通过 WP All Import 大规模更新了产品描述,并且描述中包含破坏了 feed 的 XML 结构的 HTML 标签。不是整个提要,而是特定的优惠 - 描述中包含的优惠,例如未闭合的标签或不转义的 & 符号。 Market 的 XML 解析器在第一次报价失败后就简单地跳过了所有内容,然后产品就悄然消失了。我们在提要生成管道中添加了描述清理(strip_tags、清理特殊字符、空格标准化),从那时起,此类问题就不再出现。但如果没有验证,这个错误可能会存在数月而不被发现。
您知道,在多年来上传到市场的过程中,我得出了一个重要结论:提要的质量比其中的产品数量更重要。上传三千个精心准备的产品(包含完整的参数、高质量的图像、正确的价格和描述)比上传一万七千个产品要好,其中一半有问题。市场在排名时会考虑商店的质量,拒绝产品比例高的商店排名低于所有产品都经过第一次审核的商店。我们模块中的过滤和验证正是针对此目的 - 帮助您上传最高质量的 Feed,而不是最大的 Feed。
选择什么以及如何开始
我经常听到这样的问题:您的模块与用于生成 YML 的现有插件有何不同?市场上有适用于 Yandex Market 的 YML、带有 YML 模板的 WP All Export、CodeCanyon 的多种付费解决方案。诚实的答案是,从功能上来说,它们中的许多都解决了一个基本问题:从 WooCommerce 数据生成 YML 格式的 XML 文件。区别在于细节。
首先是集成。用于生成提要的单独插件不知道有关您与 1C 的集成、B2B 价格、自定义字段或内容审核系统的任何信息。 COS WP Woo 是一个所有模块协同工作的单一生态系统。 1C 起的价格会自动显示在 Feed 中。 CF 模块中的自定义字段自动成为参数。审计模块中的 SEO 检查补充了 feed 验证。这不是营销废话,而是一个实际的区别:更少的冲突,更少的体力劳动,更少的东西损坏的机会。
第二个是验证。我还没有看到有哪个插件可以在生成提要之前检查每个产品是否符合市场要求,并在用户友好的界面中显示问题列表。通常,您会在几个小时或几天后从市场审核报告中了解到问题。然后“在一万七千件中找到有问题的产品”的任务就开始了。我们的仪表板立即显示问题。
第三 - 操作调度程序而不是 wp_cron。 WordPress cron 不是真正的 cron,它会在您访问站点时运行。如果您的网站流量很少(B2B 商店在非营业时间会出现这种情况),cron 可能无法按时启动,并且 feed 也不会更新。 Action Scheduler 的工作方式有所不同 - 它保证任务在给定的时间间隔内完成,即使没有人访问该站点。对于像更新提要这样的关键任务,这是至关重要的。
第四,支持具有正确数据继承的变体。这听起来像是一件小事,但在实践中,不正确的变异处理是饲料问题的最常见根源。没有价格、没有描述、没有图像的产品 - 所有这一切都是插件不知道如何遵循从变体到父级的继承链这一事实的结果。
如果您当前正在使用另一个插件来生成 YML 并且它有效,我并不是说您迫切需要更改所有内容。但是,如果您遇到审核问题,如果 Feed 更新不规则,如果 1C 起的价格延迟到达,如果您在上传前花时间手动检查产品,请查看我们的模块。它在一个插件中全面解决了所有这些问题,而无需将不同的解决方案组合在一起,并希望它们在您下次更新 WordPress 时不会崩溃。
在 COS WP Woo 中设置 Yandex Feed 模块需要十五分钟到一个小时,具体取决于您想要配置类别和参数映射的详细程度。基本设置 - 商店名称、类别选择、更新时间表 - 十五分钟。完整设置包括将所有类别映射到 Yandex 树、配置参数、交付规则和过滤 - 一个小时。此后,提要将过自己的生活:它会被更新、验证并在仪表板上显示状态。您正在经营一家企业,而不是摆弄 XML 文件。
我经常听到这样的反对意见:“如果我可以为这个任务安装一个单独的插件,为什么我需要在 WooCommerce 插件中使用 Yandex.Market 模块?”公平的问题。如果您只需要生成 feed 而无需其他任何东西,那么单独的插件就可以了。但实际上,上传到市场并不是一项孤立的任务。它与定价、仓库的可用性、产品数据和描述的 SEO 质量有关。当所有这些东西都存在于彼此一无所知的不同插件中时,您需要花费时间粘合在一起,手动同步并解决冲突。单一平台消除了这个令人头疼的问题。 feed模块直接“看到”1C数据,了解B2B价格和群体,并使用SEO模块验证。所有这一切都无需额外配置,无需第三方集成,也不存在下一次 WordPress 更新将破坏来自不同作者的五个插件的脆弱结构的风险。
尝试 COS WP Woo - 这是唯一一款在一个解决方案中涵盖上传到 Yandex.Market 以及 1C 集成、自定义字段、B2B 价格和 SEO 检查的 WooCommerce 插件。只需半小时即可安装、设置您的 Feed,无需再手动处理价目表。