keywords字段对Packagist搜索仅有极低权重,仅支持完全匹配或前缀匹配,不参与全文检索;正确写法是用5个以内小写、具体、场景化字符串数组,如["laravel","redis","cache-driver"]。

composer.json 的 keywords 字段到底有没有用
关键词字段 keywords 对 Packagist 搜索有实际影响,但仅限于**完全匹配或前缀匹配**,且权重极低;它不参与全文检索、模糊匹配或语义排序。Packagist 官方明确说明:搜索主要依赖包名、描述(description)和标签(type),keywords 是辅助项。
常见错误现象:composer search xxx 找不到你的包,即使你加了 ["laravel", "cache"] —— 因为本地 composer search 默认只查 Packagist 缓存的索引,而该索引更新延迟(通常数小时),且不实时反映 keywords 变更。
- 只在 Packagist 网页搜索时起轻微作用,且需用户手动输入关键词(比如搜
cache,你的包带"cache"才可能排稍前) - 不要指望靠堆砌关键词(如
["php", "library", "tool", "util"])提升曝光——这类泛词已被过滤,无效 - 关键词区分大小写?不区分,但建议全小写,避免意外不匹配
怎么正确写 keywords 字段才不算白填
关键词不是标签云,而是**精准指向使用场景或技术栈组合**。例如一个 Laravel 缓存驱动扩展,填 ["laravel", "redis", "cache-driver"] 比填 ["php", "cache", "extension"] 有效得多。
- 优先选具体技术名:
"spatie/laravel-permission"的关键词是["laravel", "permissions", "roles"],而非["auth", "security"] - 避免单字词(
"log")、通用词("helper")、拼写变体("colour"vs"color") - 最多 5 个,超过部分 Packagist 不显示,也不增强搜索
- 值必须是字符串数组,不能是逗号分隔的字符串:
"keywords": ["laravel", "cache"]✅,"keywords": "laravel,cache"❌(会导致 JSON 解析失败)
为什么改了 keywords 但 Packagist 上没更新
Packagist 不主动轮询你的仓库,它依赖你**触发同步**,或等待 Webhook 自动推送。手动修改 composer.json 并 push 到 GitHub/GitLab 后,若未配置 Webhook 或 Webhook 失败,关键词就不会更新。
- 检查 Packagist 页面右上角是否显示
Last updated时间 —— 如果比你 push 时间早,说明同步卡住了 - 登录 Packagist,进入你的包页面 →
Update按钮手动强制同步(需你有维护者权限) - 确保 Webhook 配置正确:GitHub 的 Payload URL 应为
https://packagist.org/api/github,Content type 选application/json,勾选Pushes和Repository dispatch - 同步失败常见错误信息:
Could not load package xxx: [UnexpectedValueException] Package is not available in a stable-enough version—— 这往往是因为version字段格式不对(如用了v1.0.0而非1.0.0),导致整个 composer.json 解析中断,keywords 也被跳过
想提高搜索权重?别只盯 keywords
真正影响搜索排名的是 name、description 和 type。Packagist 的搜索算法把 description 当作文本主体,其中的关键词密度和位置(开头更重)比 keywords 数组管用十倍。
-
description第一句话务必包含核心功能+技术栈,例如:"A Redis-based cache driver for Laravel 10+ with automatic TTL refresh" -
type字段要准确,如"laravel-package"、"library"、"metapackage"—— Packagist 用它做分类过滤,错填会直接让包“消失”在对应类别中 - 包名本身含关键词最有效:
spatie/laravel-backup比spatie/backup在搜laravel backup时强得多 - 别忽略 README.md:Packagist 会抓取首屏文本,但仅作展示,不参与搜索权重计算
关键词字段容易被当成“SEO 填空项”,其实它只是个弱信号。真正要花时间打磨的是 description 的第一行、包名的可读性,以及确保 Webhook 能稳定触发同步——这些地方出问题,keywords 写得再好也白搭。


















