description字段必须为非空英文字符串,动词开头、120字符内,否则Packagist不索引不显示;keywords需小写、真实搜索词、3–5个,禁用泛词。

description 字段必须是非空字符串,120 字符内,动词开头,不带链接或格式,否则 Packagist 不显示、不索引、搜索不到。
description 字段必须填,且不能是空字符串或 null
Packagist v2 起强制校验 description 为非空字符串。填 ""、null 或直接省略字段,都会导致页面显示 “No description”,且该包不会被纳入搜索结果——不是排名低,是根本不出现在结果页里。
- 错误写法:
"description": ""、"description": null(JSON 语法非法)、或整个字段缺失 - 正确写法:
"description": "Generates ULID and UUID v4 with zero framework dependencies" - 本地验证命令:
composer validate --strict会明确报错description is missing or empty
中文描述不被 Packagist 支持,必须用英文写
Packagist 的全文索引、关键词匹配、IDE 提示(如 PHPStorm 的 composer show 补全)全部基于英文文本解析。写中文 description 等同于留空:字符能显示,但无法被搜到、无法参与排序、不触发 IDE 的上下文提示。
- 无效示例:
"description": "生成并验证 ULID 和 UUID v4 的轻量工具"→ 搜索ulid或uuid时完全不命中 - 有效示例:
"description": "Generates and validates ULID and UUID v4, no framework dependencies" - 注意:README.md 可以用中文,但
description字段只服务机器可读场景,不是给人读的“简介”
keywords 字段要填真实搜索词,别堆泛词
keywords 是 Packagist 搜索加权的核心依据,但不校验格式——填错等于主动降权。它和 description 共同决定用户能否在 composer search 或网站搜索中发现你的包。
- 必须小写,不含空格;含短横线(如
psr-7)必须加双引号:"psr-7",否则 JSON 解析失败 - 禁用泛词:
"php"、"library"、"tool"—— 这些词毫无区分度,Packagist 会忽略或降权 - 禁用冗余词:包名是
acme/http-client,就别再填"acme"或"http-client" - 推荐组合:按用户真实搜索路径选 3–5 个,例如 HTTP client 类项目填
["http", "psr-7", "guzzle", "curl", "async"]
改完后 Packagist 页面不更新?不是缓存,是没触发同步
修改 composer.json 并 push 到 GitHub 后,Packagist 不会自动刷新页面——除非你已配置 webhook,或手动点击 “Update” 按钮。本地 composer validate 通过,不代表 Packagist 已拉取新内容。
- 检查步骤:进入 Packagist 页面 → 点右上角 “Edit” → 确认
description和keywords显示是否与当前composer.json一致 - 手动同步方式:在 Packagist 项目页点 “Update”(需有维护权限)
- 常见坑:改了
description但忘记删掉末尾多余逗号,composer validate报错却没注意到,导致 webhook 拒绝解析整份 JSON
最容易被忽略的是:description 不是写给用户看的“产品文案”,而是给机器读的“功能标签”。动词开头、无空格缩写、不超 80 字关键信息前置——这些细节决定了别人搜得到搜不到,而不是写得漂不漂亮。


















