这是重写的经典问题。根本原因是没有唯一的URL密钥。通常是由于具有相同名称的可配置简单产品部分引起的。
出于显而易见的原因,一个请求路径(URL)必须与Magento中的一项操作匹配。因此,所有请求路径都必须是唯一的。产品和类别URL路径是通过其URL密钥创建的,通常,当您拥有可配置的产品时,商店所有者/后端工作人员不会花时间确保可配置下的简单产品具有不同的URL密钥。这会导致Magento插入破折号和序列号。给定一个具有4个简单变量的可配置产品,这意味着每次迭代至少添加4个带有序列的URL(因为Magento不能/不能区分已经创建序列的运行)。这在一个大目录中迅速加起来。
恢复的工作流程如下:
- 确保所有URL键都是唯一的,以固定您的输入,并进行另一次重写索引。
- 删除所有匹配的重写
WHERE id_path LIKE "%_%" AND options="RP" AND (catalog_id IS NOT NULL OR product_id IS NOT NULL) AND target_path NOT IN (temp_table)
。
- 对于其余的重写匹配,
WHERE id_path LIKE "%_%" AND options="RP" AND (catalog_id IS NOT NULL OR product_id IS NOT NULL)
将request_path设置为target_path,将target_path设置为与category_id-product_id组合匹配且选项为NULL的request_path。
- 安装此扩展并启用所有优化
- Reindex至少重写两次,以验证行数是否一致(不更改产品或类别)。
- 监视网站站长工具和404,以获取仍在蜘蛛网中且应重定向的其他过时的URL。最好在您的网络服务器中实施301以保持
core_url_rewrite
清洁。
注意:
该脚本通过迭代属性值并将其附加到生成唯一键之前,可以帮助创建唯一的URL键。请注意,此脚本不会检查类别和产品之间的冲突。通常,这不是问题,因为类别自然会以复数形式命名,但是如果您出售例如绵羊或鱼类,这仍然是一个问题。另一个极端情况是目录URL和CMS页面之间的冲突。该脚本不会对其进行检查,但也不会影响重写,因为CMS页面标识符不在其中。这只会导致CMS页面或类别/产品页面显示在希望看到另一个的位置。
提及的temp_table应该填充所有站点地图中的URL。这通过保持短划线和序列号的当前变体有效来减轻了SEO的某些影响,然后在步骤3中将其重写为正确的URL。步骤4中的扩展名阻止了许多URL进入core_url_rewrite表,最明显的是未设置为“目录/搜索”可见性的产品。如果您有一些简单的产品是可配置的一部分,并且没有单独列出,则应将其标记为“单独不可见”,然后使用此扩展名阻止它们输入重写。对于具有可配置产品的商店,这是有价值的优化,无论它们具有此URL重写问题。关于步骤5,如果未对产品和类别的网址键进行任何更改,那么每个索引都将生成相同数量的重写。如果不是这种情况,那么您仍然在某个地方存在冲突,应该追查一下。
希望这可以澄清一些事情。