@@ -23,6 +23,7 @@ import {
2323 communitySeoCopy ,
2424 compareIndexSeoCopy ,
2525 comparePageSeoCopy ,
26+ docsPageSeoCopy ,
2627 homeSeoCopy ,
2728 ohMyPiSeoCopy ,
2829 pricingSeoCopy ,
@@ -291,6 +292,52 @@ describe("SEO metadata helpers", () => {
291292 }
292293 expect ( new Set ( compareTitles ) . size ) . toBe ( comparePages . length ) ;
293294
295+ const auditedDocsPages = [
296+ [ "/docs/agent-integrations/oh-my-opencode" , "ohMyOpenCode" ] ,
297+ [ "/docs/api" , "api" ] ,
298+ [ "/docs/configuration" , "configuration" ] ,
299+ [ "/docs/browser-automation" , "browserAutomation" ] ,
300+ [ "/docs/ios" , "ios" ] ,
301+ [ "/docs/ssh" , "ssh" ] ,
302+ [ "/docs/workspace-groups" , "workspaceGroups" ] ,
303+ [ "/docs/textbox" , "textBox" ] ,
304+ [ "/docs/concepts" , "concepts" ] ,
305+ [ "/docs/custom-commands" , "customCommands" ] ,
306+ [ "/docs/notifications" , "notifications" ] ,
307+ [ "/docs/session-restore" , "sessionRestore" ] ,
308+ [ "/docs/skills" , "skills" ] ,
309+ [ "/docs/dock" , "dock" ] ,
310+ [ "/docs/keyboard-shortcuts" , "keyboardShortcuts" ] ,
311+ [ "/docs/getting-started" , "gettingStarted" ] ,
312+ [ "/docs/remote-tmux" , "remoteTmux" ] ,
313+ ] as const ;
314+ for ( const [ path , pageKey ] of auditedDocsPages ) {
315+ if (
316+ pageKey === "remoteTmux" &&
317+ locale !== "en" &&
318+ locale !== "ja"
319+ ) {
320+ continue ;
321+ }
322+ const page = messages . docs [ pageKey ] ;
323+ rows . push (
324+ auditedRow (
325+ path ,
326+ docsPageSeoCopy (
327+ locale ,
328+ pageKey ,
329+ messageLookup ( page ) ,
330+ siteMeta ,
331+ ) ,
332+ Object . values ( page ) . filter (
333+ ( value ) : value is string =>
334+ typeof value === "string" && ! value . includes ( "<" ) ,
335+ ) ,
336+ [ page . metaTitle , page . title ] ,
337+ ) ,
338+ ) ;
339+ }
340+
294341 if ( locale === "en" || locale === "ja" ) {
295342 const pricing = messageLookup ( messages . pricing ) ;
296343 rows . push (
0 commit comments