fix(linkedin-studio): S23 harden profile — re-source profile-as-validated-object overclaim to SSOT, soften SEO claims

Profile is a self-contained, prose-heavy Grow-tier audit command (no agent, no
routing, no state). Grant-hygiene was already clean (Read + AskUserQuestion, both
used, no orphans/missing). The one real axis was b': the file repeatedly framed
the relevance model as reading and VALIDATING your profile and gating distribution
on it — contradicting the SSOT (algorithm-signals-reference.md), which confirms
only topic/interest relevance as a ranking input (content matched to a viewer's
interests, incl. beyond your network) with no off-topic magnitude figure and no
weighted profile criteria. The file was internally inconsistent — its own soft,
SSOT-true framing already sat at :17/:25/:27.

12 edits, commands/profile.md only:
- desc :5: drop "validates your profile BEFORE distributing content".
- :31 + table: drop "the model evaluates five criteria (see SSOT)" false
  attribution + HIGH/MEDIUM "Impact if Missing" postulated weights -> "LinkedIn
  does not publish a profile-scoring breakdown ... practitioner heuristics",
  column -> "Priority (heuristic)".
- :99/:161/:173/:230: reframe "first signal telling ... qualified" / "relevance
  validation" / "checks if you're connected" / "if LinkedIn's AI read my profile,
  would it believe" away from the profile-read-by-model mechanic.
- :25/:27/:51/:67: conflation fix — "your demonstrated expertise" / "tell the
  relevance model what you're expert in" -> "a viewer's interests" / "topic-
  relevance distribution" (SSOT wording) + no-percentage honesty.
- :24 (B2): "Goes to 10% of audience" -> "a slice of your network".
- :52/:61 (P3): "highest-weight search field" -> "highest-leverage" (self-
  justified rest kept).

Verify: re-grep final file — all overclaim/conflation patterns NONE, new SSOT
text in place; grant-hygiene unchanged; test-runner 81/0/0 exit 0; counts 29/19
unchanged (.md-only). FIXED, 0 deferrals.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE
This commit is contained in:
Kjell Tore Guttormsen 2026-06-19 21:12:54 +02:00
commit 10e10897ca
2 changed files with 105 additions and 22 deletions

View file

@ -2,8 +2,9 @@
name: linkedin:profile
description: |
profile/topic-relevance optimization checklist for LinkedIn's 2026 algorithm update.
LinkedIn now validates your profile BEFORE distributing content. This command audits
and optimizes your profile for maximum reach. Use when the user mentions "profile",
A coherent, on-topic profile reinforces the topic-relevance signal LinkedIn uses to decide
how widely your content is distributed. This command audits and optimizes your profile
for that signal. Use when the user mentions "profile",
"topic-relevance", "profile optimization", "why is my reach low", or wants to improve their
LinkedIn presence. Triggers on: "optimize profile", "profile/topic-relevance check", "profile audit",
"linkedin profile help", "fix my profile".
@ -21,32 +22,37 @@ You are a LinkedIn profile optimization specialist. Help the user optimize their
Read `references/algorithm-signals-reference.md` for algorithm mechanics.
**The Fundamental Shift:**
- **In the older feed model:** Post something -> Goes to 10% of audience -> Algorithm tracks engagement
- **In the 2026 relevance model:** profile/topic relevance is weighed alongside engagement — content matched to your demonstrated expertise is distributed more widely (including beyond your network), so an off-topic post from a misaligned profile tends to underperform.
- **In the older feed model:** Post something → a slice of your network sees it → the algorithm tracks engagement to decide wider reach
- **In the 2026 relevance model:** topic/interest relevance is weighed alongside engagement — content matched to a viewer's interests is distributed more widely (including beyond your network), so an off-topic post from a profile that sends no clear topic signal tends to underperform.
**Profile/topic alignment is a real ranking input — content matched to your demonstrated expertise is distributed more widely (see `references/algorithm-signals-reference.md`).**
**Profile/topic alignment is a real ranking input — content matched to a viewer's interests is distributed more widely, including beyond your network (see `references/algorithm-signals-reference.md`). LinkedIn confirms no off-topic reach-reduction figure — treat alignment as a real input, not a quantified penalty.**
## The Profile/Topic Relevance Factors
The 2026 relevance-ranking model evaluates five criteria (see `references/algorithm-signals-reference.md`):
Topic alignment is a confirmed ranking input, but LinkedIn does **not** publish a
profile-scoring breakdown — there is no official "five criteria" weighting (see
`references/algorithm-signals-reference.md`). The factors below are practitioner heuristics
for sending a coherent, on-topic expertise signal; treat the priority as directional, not a
measured coefficient:
| Criteria | What It Checks | Impact if Missing |
|----------|----------------|-------------------|
| **About Section** | Does it establish expertise on your topics? | HIGH - first signal of credibility |
| **Experience Section** | Relevant background with impact statements? | HIGH - proves you've done the work |
| **Content History** | Have you posted about this topic before? | MEDIUM - consistency signal |
| **Network** | Connected to professionals in this space? | MEDIUM - social proof |
| **Engagement Patterns** | Do you comment on posts about your topics? | MEDIUM - active participation |
| Factor | What it signals | Priority (heuristic) |
|--------|-----------------|----------------------|
| **About Section** | Establishes your expertise on your topics | High — first thing a reader (and a topic-matcher) sees |
| **Experience Section** | Relevant background with impact statements | High — evidence you've done the work |
| **Content History** | You've posted on this topic before | Medium — consistency signal |
| **Network** | Connected to professionals in this space | Medium — social proof |
| **Engagement Patterns** | You comment on posts in your topics | Medium — active participation |
## Profile SEO — your profile is also a search surface
Topic-relevance ranking (above) governs **content distribution**. Separately,
your profile is **indexed by LinkedIn search** — when someone searches a topic, a
role, or a skill, LinkedIn keyword-matches profile fields to decide who surfaces.
The two reinforce each other: the same keywords that tell the relevance model
what you're expert in are the ones that make you findable. Optimize for both.
The two reinforce each other: the same keywords that make your topic legible — to
readers and to topic-relevance distribution — are the ones that make you findable in
search. Optimize for both.
**The headline is your highest-weight search field.** It is keyword-matched, shown
**The headline is widely regarded as your highest-leverage search field.** It is keyword-matched, shown
in every search result and connection suggestion, and renders under your name
across the site — so it does the most SEO work per character. Lead with the plain
words people actually search (the role, the domain, the audience), not a clever
@ -58,8 +64,8 @@ words they'd type them — not synonyms only you use):
| Section | Keyword target | Why it ranks |
|---------|----------------|--------------|
| **Headline** | 34 primary topic terms + audience + role | Highest-weight search field; always visible |
| **About** | Same primary terms, front-loaded in the first 23 lines, then 58 supporting terms naturally across the body | Indexed for search; first lines double as the relevance model's expertise signal |
| **Headline** | 34 primary topic terms + audience + role | Highest-leverage search field; always visible |
| **About** | Same primary terms, front-loaded in the first 23 lines, then 58 supporting terms naturally across the body | Indexed for search; the front-loaded first lines also carry your strongest on-topic signal |
| **Experience (titles + body)** | The searchable job title (not an internal-only label) + 23 domain terms per role | Job titles are weighted in search; an internal title nobody searches is invisible |
| **Skills** | Your top 3 skills = your 3 core content topics, exact-match to common search terms | Matched directly against recruiter/search skill filters |
| **Featured** | Posts whose titles carry your topic terms | Reinforces the topic association for both search and relevance |
@ -96,7 +102,7 @@ Guide the user through each section using AskUserQuestion for interactive feedba
### Section 2: About Section (2,600 characters max)
**Critical:** This is the first signal telling topic-relevance what you're qualified to discuss.
**Critical:** Your About opener is the clearest place to state, in plain on-topic terms, what you're expert in — the strongest single contribution to a coherent topic signal.
**Structure:**
@ -158,7 +164,7 @@ Guide the user through each section using AskUserQuestion for interactive feedba
### Section 5: Skills Section
**Critical for profile/topic-relevance validation.**
**Your top skills are a strong, searchable topic signal.**
**Ask the user:** What skills are listed on your profile?
@ -170,7 +176,7 @@ Guide the user through each section using AskUserQuestion for interactive feedba
### Section 6: Network Quality
**profile/topic-relevance checks if you're connected to professionals in your expertise area.**
**A network concentrated in your expertise area reinforces your topic signal and your social proof** (a practitioner heuristic — LinkedIn does not publish network as a profile-ranking factor).
**Ask the user:** Who are you primarily connected with? (peers, clients, random connections?)
@ -227,7 +233,7 @@ Based on the audit, provide a prioritized action list:
Before posting, the user should ask themselves:
> "If LinkedIn's AI read my profile, would it believe I'm an expert on the topics I post about?"
> "Does my profile make it obvious — to a human and to LinkedIn's topic-matching — that I'm an expert on the topics I post about?"
If the answer is no, fix the profile FIRST before posting.

View file

@ -1613,3 +1613,80 @@ source so the B2 rewrite can't be re-rendered from a stale reference).**
non-scope follow-up (the command calls the mutation correctly).
---
### /linkedin:profile — profile/topic-relevance + profile-SEO audit walkthrough (7 sections → prioritized action plan); self-contained, no agent/routing/state (S23)
**INTENT.** Grow-tier **atomic execution command**, prose-heavy + guided (`AskUserQuestion`).
**Self-contained** — no agent delegation, no `/linkedin:Y` routing, no state mutation. Audits the
profile for the topic-relevance ranking signal + profile search-SEO.
**SIMULATE (adversarial cold quality-reviewer; grounded prose-trace — pure prose, NO fixture: command
reads/mutates no state).** Headline section (`:79-96`) traced against operator input
`"AI-rådgiver | KI-transformasjon | Innholdsprodusent"` → checklist `:85-88` yields NO audience / NO
outcome / vague titles → concrete non-generic rewrite direction. Every mechanical claim (grant grep, SSOT
read, pattern greps) from a tool, never by reasoning.
**EVALUATE (relevant axes; mechanical predicate each).**
- **(a) intention: PASS** — desc + Grow-journey role coherent; 3 refs (`algorithm-signals-reference.md`,
`troubleshooting-guide.md`, `SKILL.md`) resolve.
- **(b) algorithm-bar (axis-b): 1 systemic FINDING (B1) + 1 minor (B2).** **B1 — "profile-as-validated-object"
overclaim, 9 sites:** the file repeatedly asserts the relevance model **reads & validates your profile**
and gates distribution on it — `:5` "validates your profile BEFORE distributing content"; `:31` "the model
**evaluates five criteria** (see SSOT)" (**false SSOT attribution** — SSOT has no such breakdown); `:35-39`
"Impact if Missing: **HIGH/HIGH/MEDIUM…**" (postulated coefficients SSOT forbids, `:14/:23`); `:99` "first
signal telling … what you're **qualified** to discuss"; `:161` "relevance **validation**"; `:173` "**checks
if** you're connected"; `:230` "if LinkedIn's AI **read my profile**, would it **believe**"; `:51/:67` SEO
conflation ("**tell the relevance model** what you're expert in" / "the **relevance model's expertise
signal**"). SSOT (`algorithm-signals-reference.md:25-30/:85-90`) confirms ONLY: topic/interest relevance is a
ranking input — content matched to a **viewer's interests** is distributed incl. beyond your network (Jurka,
high); **no off-topic magnitude figure; no weighted profile criteria**. File was **internally inconsistent**
its own soft, SSOT-true framing already at `:17/:25/:27`. Same class as follow-up #1 (`audit.md:61`) +
v4.0.0 "reconcile to one sourced statement". **B2** `:24` "Goes to **10% of audience**" — postulated
old-model number (`:131` "40%" is an illustrative impact-bullet example → PASS).
- **(c) quality rules: PASS** — no post emission (audit prose only); buzzword list cited correctly (`:73`
steers away from "thought leader/guru/ninja").
- **(d) grants + graceful + wiring: PASS.** **Grant-hygiene REN (two-way):** `allowed-tools` = `Read` +
`AskUserQuestion` (`:11-13`), both used (`:21/:27/:31/:236` Read; `:77` AskUserQuestion); WebFetch / Write /
Bash / Task / subagent_type / .mjs → **NONE** (no orphans, no missing node/Bash grant). No agent/routing.
Graceful degradation OK (Q&A runs regardless of ref availability).
- **P3 — profile-SEO honesty (`:41-73`): largely defensible** (about LinkedIn *search*, not the ranking
model; correctly does NOT cite SSOT). One practitioner-claim-as-fact: "**highest-weight** search field"
(`:52` prose + `:61` table) — self-justified mechanically, softened not removed.
**HARDEN (12 edits, 1 file — `commands/profile.md`; all surgical re-source to SSOT framing).**
1. [REWORK · b] `:5` desc — "validates your profile BEFORE distributing content" → "a coherent, on-topic
profile reinforces the topic-relevance signal LinkedIn uses to decide how widely your content is distributed".
2. [REWORK · b] `:24` (B2) — "Goes to 10% of audience" → "a slice of your network sees it".
3. [REWORK · b] `:25/:27` — "content matched to **your demonstrated expertise**" → "**a viewer's interests**"
(SSOT wording) + added "LinkedIn confirms no off-topic reach-reduction figure — not a quantified penalty".
4. [REWORK · b] `:31` + table `:33-39` — dropped "the model evaluates five criteria (see SSOT)" + HIGH/MEDIUM
"Impact if Missing" weights → "LinkedIn does **not** publish a profile-scoring breakdown … practitioner
heuristics", column → "Priority (heuristic)", High/Medium relabeled directional.
5. [REWORK · b] `:99` — "first signal telling … qualified to discuss" → "the clearest place to state … the
strongest single contribution to a coherent topic signal".
6. [REWORK · b] `:161` — "Critical for profile/topic-relevance validation" → "Your top skills are a strong,
searchable topic signal".
7. [REWORK · b] `:173` — "relevance checks if you're connected" → "a network concentrated in your expertise
area reinforces your topic signal and social proof (heuristic — LinkedIn doesn't publish network as a
profile-ranking factor)".
8. [REWORK · b] `:230` — "If LinkedIn's AI read my profile, would it believe I'm an expert" → "Does my
profile make it obvious — to a human and to LinkedIn's topic-matching".
9. [REWORK · b] `:51/:67` SEO conflation — "tell the relevance model what you're expert in" → "make your
topic legible … to topic-relevance distribution"; "the relevance model's expertise signal" → "carry your
strongest on-topic signal".
10. [NICE · P3] `:52/:61` — "highest-weight search field" → "highest-leverage" (×2; rest self-justified, kept).
**VERIFY.**
- Re-grepped final file. All overclaim/conflation patterns (`validates your profile before | evaluates five
criteria | first signal telling | qualified to discuss | checks if you're connected | relevance validation |
if linkedin's ai read | 10% of audience | highest-weight | demonstrated expertise | Impact if Missing | tell
the relevance model | relevance model's expertise signal`) → **NONE**. New SSOT text present (`:26/:28/:33/
:38/:54/:178/:235`).
- Grant-hygiene unchanged: `allowed-tools` = Read + AskUserQuestion (`:11-13`); WebFetch/Write/Bash/Task/.mjs → **NONE**.
- `git diff --stat` = 1 file, **+28 / 22**.
- `bash scripts/test-runner.sh``Passed: 81 · Failed: 0 · Warnings: 0`, **exit 0**; counts **29/19**
unchanged (.md-only edits — node hook/analytics tests not triggered).
- Disposition: **FIXED** (12 edits, 1 file) · 0 deferrals · axis-b **FIXED**, axes a/c/d **PASS** · no
fixture needed (pure prose, no state).
---