Skip to content

seo: make plugin task page titles/H1 unique and descriptive#4977

Open
vfanucci wants to merge 1 commit into
mainfrom
seo/fix-plugin-task-titles
Open

seo: make plugin task page titles/H1 unique and descriptive#4977
vfanucci wants to merge 1 commit into
mainfrom
seo/fix-plugin-task-titles

Conversation

@vfanucci

@vfanucci vfanucci commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Context

Technical SEO audit (Screaming Frog, 2026-06-15), highest-volume on-page issue. Single root cause: plugin task pages (io.kestra.*, 1361 pages) use the bare class name as both <title> and <h1>.

Title Pages
Trigger | Kestra 74
Delete | Kestra 66
Query | Kestra 52
Create | Kestra 51

Because most plugins expose those same task names, this single branch produces ~1,204 duplicate titles, ~1,204 duplicate H1s and ~1,862 titles under 30 characters. (/blueprints is not affected: 19 duplicate titles, 0 duplicate H1s.)

This is complementary to #4688 (which added "how to use" markdown + FAQs to plugin parent pages). That work never touched the auto-generated task pages — the 2026-06-15 crawl, taken after #4688 rolled out, still showed these duplicates.

Change

In buildPluginPageProps.ts, task pages now prefix the task name with their plugin/subgroup container title (the same title group/subgroup pages already use) instead of the bare class name:

Page Before After
aws/s3/…Trigger Trigger AWS S3 Trigger
gcp/bigquery/…Query Query Google Cloud BigQuery Query
slack/chats/…Create Create Slack Chats Create
jdbc-postgres/…Query Query PostgreSQL Query

A single variable (headingTitle) is changed, resolving duplicate titles, duplicate H1s and short titles at once, and adding integration keywords to every task page. Group/subgroup pages are unchanged; elementTitle (sidebar/breadcrumb) is unchanged.

Verified

  • Container titles confirmed live ("AWS S3", "Google Cloud BigQuery", "PostgreSQL"…), so the rendered format matches "Plugin Subgroup Task".
  • ⚠️ Not built locally (worktree without node_modules) → please rely on CI + preview to validate the rendered <title>/<h1> on a few task pages.

Out of scope (intentional)

Task-page meta descriptions: short (~35 chars) but unique and accurate → "Opportunity/Low", low ROI (Google rewrites short metas). Can be revisited later if needed.

🤖 Generated with Claude Code

Plugin task pages (io.kestra.*) set both <title> and <h1> to the bare class
name via formatElementName(pluginType) — "Trigger", "Query", "Create",
"Delete". Since most plugins expose those same task names, the crawl found
~1,200 duplicate titles, ~1,200 duplicate H1s and ~1,860 titles under 30
characters, almost all from this one branch.

Prefix the task name with the page's plugin/subgroup container title (the same
title the group/subgroup pages already use), e.g. "AWS S3 Trigger",
"Google Cloud BigQuery Query", "PostgreSQL Query". This resolves the duplicate
title, duplicate H1 and short-title issues in one change, and adds integration
keywords to every task page. Subgroup/group pages are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

☁️ Cloudflare Worker Preview Deployed!

🔗 https://ks-seo-fix-plugin-task-titles-docs.kestra-io.workers.dev
🔗 https://d5325258-docs.kestra-io.workers.dev

## 🔦 Lighthouse Benchmark

Tested: https://ks-seo-fix-plugin-task-titles-docs.kestra-io.workers.dev on 2026-06-16 14:50 UTC
No baseline available — scores will appear after the first merge to main

Scores (0–100, higher is better)

Page Performance Accessibility Best Practices SEO
Home 83 83 56 92
Pricing 96 91 56 100
Enterprise 96 82 56 100
Cloud 89 87 56 100
About Us 88 91 56 100
Docs Landing 91 88 56 92
Contribute to Kestra (simple docs) 99 88 56 92
Flow (full featured docs) 91 90 56 92
Blog Index 63 91 56 100
Blog Post (sample) 92 87 56 100
VS Page (sample) 97 88 56 100
Plugins Landing 90 81 56 92
Plugin Page (sample) 94 87 56 100
Plugin Debug Page (sample) 89 87 56 100
Plugin Debug Return Page (sample) 91 88 56 100
Blueprints Landing 92 80 56 92
Blueprint Audit Logs CSV Export 52 86 56 100

Core Web Vitals (lower is better)

Page LCP FCP TBT CLS Speed Index
Home 1.51 s 0.74 s 217 ms 0.000 2.20 s
Pricing 1.29 s 0.68 s 14 ms 0.000 1.01 s
Enterprise 1.40 s 0.61 s 15 ms 0.003 0.92 s
Cloud 2.12 s 0.65 s 23 ms 0.000 1.04 s
About Us 2.24 s 0.65 s 44 ms 0.000 0.84 s
Docs Landing 1.10 s 0.56 s 211 ms 0.002 1.10 s
Contribute to Kestra (simple docs) 0.93 s 0.57 s 39 ms 0.000 0.83 s
Flow (full featured docs) 1.21 s 0.62 s 175 ms 0.002 1.40 s
Blog Index 5.56 s 1.34 s 85 ms 0.001 40.26 s
Blog Post (sample) 1.81 s 0.62 s 14 ms 0.000 0.87 s
VS Page (sample) 1.21 s 0.63 s 15 ms 0.000 0.81 s
Plugins Landing 1.15 s 0.60 s 25 ms 0.000 2.94 s
Plugin Page (sample) 0.98 s 0.60 s 65 ms 0.051 2.16 s
Plugin Debug Page (sample) 0.91 s 0.52 s 200 ms 0.018 1.99 s
Plugin Debug Return Page (sample) 1.07 s 0.54 s 107 ms 0.025 2.45 s
Blueprints Landing 1.33 s 0.71 s 16 ms 0.000 2.08 s
Blueprint Audit Logs CSV Export 1.46 s 0.61 s 419 ms 0.485 2.24 s
Legend

🟢 improved  ·  🔻 regressed  ·  (blank) no significant change
Score threshold: ±10 pts  ·  Metric threshold: ±30% of baseline

@vfanucci vfanucci requested a review from aj-emerich June 16, 2026 14:47
@aj-emerich

Copy link
Copy Markdown
Member

I'm not sure about this change technically - best to ask a Front End to review or plugin team.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants