keywords字段仅用于Packagist搜索的显式关键词匹配,不参与依赖解析或安装,须为小写无空格字符串数组,最多索引前10个,填3–5个精准词如["laravel","logging"],避免泛化堆砌。

Composer 的 keywords 字段不是搜索优化工具,它不参与 Packagist 搜索排名,也不影响安装行为——只用于人工浏览时快速识别包用途。
keywords 字段的实际作用场景
这个字段纯粹是给开发者看的:在 Packagist 页面、IDE 插件提示、composer show 输出里作为语义标签出现。比如别人搜 “cache redis”,keywords 里写了 ["cache", "redis"] 的包会更容易被扫到,但不会因此排到前面。
- 适合标注技术栈(
"laravel","symfony") - 适合说明能力范畴(
"api","validation","middleware") - 不适合写泛词(
"php","library")或营销话术("best","modern")
怎么写才不踩坑
常见错误是当成 SEO 字段堆砌,或者用空格/逗号拼一长串——keywords 必须是字符串数组,且每个元素应为小写、无空格、语义明确的单词或短词。
- ✅ 正确:
["http", "client", "psr-18"] - ❌ 错误:
["HTTP client", "PSR-18 compliant"](含空格和修饰词) - ❌ 错误:
"http,client,psr-18"(字符串而非数组) - ❌ 错误:
["PHP", "Laravel 10+"](大小写混用、含版本号)
示例:
"keywords": ["cache", "redis", "psr-6"]
和 name、description 的分工区别
name 定义唯一标识,description 解释“这是什么”,keywords 回答“这能干什么”。三者不能互相替代:
- 别在
keywords里重复name(如mycompany/logger的 keywords 写["logger"]是冗余) - 别用
keywords补充功能细节(那是description的事),比如“支持异步写入”不该进 keywords - 如果一个包同时适配 Laravel 和 Symfony,
["laravel", "symfony"]合理;但写成["framework-agnostic"]就失去关键词意义
真正容易被忽略的是:Packagist 不索引 keywords 做全文匹配,只做精确词匹配。写得再全,用户不手动点开关键词筛选,就根本看不到——所以它本质是个被动标签,不是主动曝光手段。











