在 catalog_product_view.xml 里写了 <referenceBlock name="..." remove="true"/>,清缓存、重新部署静态文件,页面上的内容仍在。多数时候不是 remove 语法失效,而是你操作的 handle 或 name 根本不是最终页面里的那个元素。

先确认 full action name 与实际 layout handle

商品页除了 catalog_product_view,还可能加载商品类型、布局更新、主题和 CMS 相关 handle。自定义控制器的路由名与文件名也经常写错。开启开发环境的 layout 调试或在受控日志中记录 handles,确认你的 XML 确实被加载。

remove 使用的是 layout name,不是 CSS class

浏览器里的 id、class 和模板文件名不能直接当 referenceBlock name。找到定义该 block 的原始 layout XML,确认 name。若目标是 container,应使用 referenceContainer。页面看起来相同的内容也可能由另一个 block、view model 或 JS 组件再次渲染。

<referenceBlock name="product.info.review" remove="true"/>
<referenceContainer name="sidebar.main" remove="true"/>

加载顺序可能把它重新加回来

模块 A 删除 block,模块 B 在后续 handle 又以相同或不同 name 添加。检查模块 sequence、主题继承和所有同名声明。不要只在 app/design 搜索,vendor 模块和后台 CMS Layout Update 也可能参与。

如果 block 由 PHP 在运行时创建,layout XML 的静态 remove 找不到它,需要定位创建点,从扩展机制或配置解决,而不是添加更多 remove。

哪些缓存需要清

Layout 合并主要受 layout/config/FPC 影响,静态内容部署通常与“block 是否存在”无关。开发时清最小必要缓存,避免每次全 flush 让其他问题被掩盖。生产修改应随完整发布流程,不要直接编辑 vendor。

验收不仅看元素消失,还要检查页面没有留下空容器、关联 JS 不报错、结构化数据与移动端布局正常。若删除的是扩展提供的业务入口,还要确认没有影响结账或可访问性。