{"record":{"id":"80027340cb04bd4e","repo":"facebook/docusaurus","slug":"the-following-permalinks-are-duplicated-errorme","errorCode":null,"errorMessage":"The following permalinks are duplicated:\n${errorMessage}","messagePattern":"The following permalinks are duplicated:\n(.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/docusaurus-plugin-content-blog/src/authorsMap.ts","lineNumber":88,"sourceCode":"    // Group authors by their permalink\n    .groupBy((author) => author.page?.permalink)\n    // Filter to keep only permalinks with more than one author\n    .pickBy((authors) => authors.length > 1)\n    // Transform the object into an array of [permalink, authors] pairs\n    .toPairs()\n    .value();\n\n  if (permalinkCounts.length > 0) {\n    const errorMessage = permalinkCounts\n      .map(\n        ([permalink, authors]) =>\n          `Permalink: ${permalink}\\nAuthors: ${authors\n            .map((author) => author.name || 'Unknown')\n            .join(', ')}`,\n      )\n      .join('\\n');\n\n    throw new Error(\n      `The following permalinks are duplicated:\\n${errorMessage}`,\n    );\n  }\n}\n\nfunction normalizeAuthor({\n  authorsBaseRoutePath,\n  authorKey,\n  baseUrl,\n  author,\n}: {\n  authorsBaseRoutePath: string;\n  authorKey: string;\n  baseUrl: string;\n  author: AuthorInput;\n}): AuthorWithKey {\n  function getAuthorPage(): AuthorPage | null {\n    if (!author.page) {","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/facebook/docusaurus/blob/3f483e80e326cc646b54b83d564b3f0c4881b9a6/packages/docusaurus-plugin-content-blog/src/authorsMap.ts#L70-L106","documentation":"Thrown by authorsMap validation when two or more authors in the authors map share the same permalink (authorsMap.permalink). Each author page must have a unique URL; duplicates would cause route collisions. The message lists each duplicated permalink and the conflicting author names.","triggerScenarios":"Two keyed authors in authors.yml specify the same `permalink` value (or both omit it, resolving to a default). Triggered when the blog plugin builds the authors map.","commonSituations":"Copying an author entry and forgetting to change the permalink, or removing permalink from multiple entries so they all fall back to the same slugified name. Locale-specific author files that duplicate permalinks.","solutions":["Open authors.yml and find every entry listed in the error message.","Give each author a distinct permalink (e.g. /authors/jane, /authors/john).","Re-run the build to confirm no other permalink collisions remain."],"exampleFix":"# before\njane:\n  name: Jane\n  permalink: /authors/j\njohn:\n  name: John\n  permalink: /authors/j\n# after\njane:\n  name: Jane\n  permalink: /authors/jane\njohn:\n  name: John\n  permalink: /authors/john","handlingStrategy":"validation","validationCode":"const permalinks = Object.values(authorsMap).map(a => (a as any).permalink).filter(Boolean);\nconst dupes = permalinks.filter((p, i, arr) => arr.indexOf(p) !== i);\nif (dupes.length) throw new Error(`Duplicate author permalinks: ${dupes}`);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always set an explicit permalink for each author entry.","CI-lint the authors map for unique permalinks."],"tags":["blog","authors","permalink","validation"],"backgroundTag":null,"analyzedSha":"3f483e80e326cc646b54b83d564b3f0c4881b9a6","analyzedAt":"2026-08-12T13:25:04.382Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}