keploy-seo-audit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # keploy-seo-audit
2
+
3
+ A Claude Code skill that audits blog content against Keploy's SEO guidelines and generates a detailed Markdown report.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npx keploy-seo-audit
9
+ ```
10
+
11
+ That's it. Restart Claude Code after installing.
12
+
13
+ ## Usage
14
+
15
+ Open Claude Code and type:
16
+
17
+ ```
18
+ SEO audit this blog:
19
+
20
+ Primary keyword: API testing
21
+ Meta title: How to do API Testing
22
+ Meta description: Learn API testing with examples...
23
+
24
+ Blog content:
25
+ ---
26
+ [paste your full blog here]
27
+ ---
28
+ ```
29
+
30
+ Claude Code will generate a `seo-audit-report.md` in your current directory with:
31
+
32
+ - āœ… / āŒ / āš ļø status for every rule (56+ checks)
33
+ - šŸ”“ Critical → 🟢 Low priority labels
34
+ - Score out of 100
35
+ - Action checklist of exactly what to fix
36
+
37
+ ## What gets audited
38
+
39
+ 1. AIO Optimization
40
+ 2. URL Structure
41
+ 3. Page Titles
42
+ 4. Blog/Hub Content Structure
43
+ 5. Headings
44
+ 6. Image Optimization
45
+ 7. Keywords
46
+ 8. Internal Linking
47
+ 9. External Links
48
+ 10. Meta Description
49
+ 11. Meta Title
50
+ 12. Instagram Carousel
51
+
52
+ ## Requirements
53
+
54
+ - [Claude Code](https://claude.ai/code) installed
55
+ - Node.js 14+
package/install.js ADDED
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const os = require('os');
6
+
7
+ const SKILL_NAME = 'keploy-seo-audit';
8
+ const SOURCE_DIR = path.join(__dirname, 'skill');
9
+ const TARGET_DIR = path.join(os.homedir(), '.claude', 'skills', SKILL_NAME);
10
+
11
+ function copyDir(src, dest) {
12
+ fs.mkdirSync(dest, { recursive: true });
13
+ const entries = fs.readdirSync(src, { withFileTypes: true });
14
+ for (const entry of entries) {
15
+ const srcPath = path.join(src, entry.name);
16
+ const destPath = path.join(dest, entry.name);
17
+ if (entry.isDirectory()) {
18
+ copyDir(srcPath, destPath);
19
+ } else {
20
+ fs.copyFileSync(srcPath, destPath);
21
+ }
22
+ }
23
+ }
24
+
25
+ console.log('\nšŸš€ Installing Keploy SEO Audit skill for Claude Code...\n');
26
+
27
+ try {
28
+ copyDir(SOURCE_DIR, TARGET_DIR);
29
+ console.log('āœ… Skill installed successfully!');
30
+ console.log(`šŸ“ Location: ${TARGET_DIR}`);
31
+ console.log('\nšŸ‘‰ Restart Claude Code and type:');
32
+ console.log(' "SEO audit this blog: [paste your blog]"\n');
33
+ } catch (err) {
34
+ console.error('āŒ Installation failed:', err.message);
35
+ process.exit(1);
36
+ }
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "keploy-seo-audit",
3
+ "version": "1.0.0",
4
+ "description": "Install the Keploy SEO Audit skill for Claude Code — audits blog content against Keploy's SEO guidelines and generates a detailed .md report.",
5
+ "bin": {
6
+ "keploy-seo-audit": "./install.js"
7
+ },
8
+ "scripts": {
9
+ "postinstall": "node install.js"
10
+ },
11
+ "files": [
12
+ "install.js",
13
+ "skill/"
14
+ ],
15
+ "keywords": [
16
+ "keploy",
17
+ "seo",
18
+ "audit",
19
+ "claude",
20
+ "claude-code",
21
+ "skill",
22
+ "content",
23
+ "blog"
24
+ ],
25
+ "author": "Keploy",
26
+ "license": "MIT",
27
+ "engines": {
28
+ "node": ">=14"
29
+ }
30
+ }
package/skill/SKILL.md ADDED
@@ -0,0 +1,347 @@
1
+ ---
2
+ name: keploy-seo-audit
3
+ description: Audit blog or hub content against Keploy's official SEO content guidelines and generate a structured Markdown audit report. Use this skill whenever a user submits a blog post or article for SEO review, asks to "audit", "review", "check", or "score" their content, or wants to find what is missing or needs fixing. Trigger on phrases like "review my blog", "check this post", "SEO audit", "content review", "what's wrong with my article", or any time content is submitted alongside a request for feedback. Always produce a structured .md audit report — never just respond conversationally.
4
+ ---
5
+
6
+ # Keploy SEO Audit Skill
7
+
8
+ You are a strict SEO content auditor for Keploy. Your sole job is to review submitted content against Keploy's official SEO guidelines and produce a complete, detailed, actionable Markdown audit report.
9
+
10
+ ## Absolute Rules
11
+
12
+ 1. **Cover every single guideline** — read `references/guidelines.md` in full before starting. Not one rule can be skipped or grouped away.
13
+ 2. **No modifications** — audit strictly as the guidelines are written. No additions, no subtractions, no personal interpretations.
14
+ 3. **No assumptions** — if information is not present in the submitted content or metadata, flag it as a gap. Do not assume it exists elsewhere.
15
+ 4. **Output is always a file** — use the Write tool to save the report as `seo-audit-report.md` in the current working directory. Do this automatically without asking. After saving, print the file path and a short summary in the terminal.
16
+
17
+ ---
18
+
19
+ ## Step 1 — Read the guidelines first
20
+
21
+ Before doing anything else:
22
+
23
+ ```
24
+ read references/guidelines.md
25
+ ```
26
+
27
+ Load all 12 sections into context. You will audit every section, every bullet, every rule.
28
+
29
+ ---
30
+
31
+ ## Step 2 — Collect inputs
32
+
33
+ **Important:** This skill is used for pre-publish review. URL/slug may not exist yet — that is normal and expected. Only block on truly missing content. Everything else should be marked āš ļø Unverifiable if absent.
34
+
35
+ The ONLY truly required input is:
36
+ - **Full blog content (body text)** — cannot audit without this. If missing, ask for it.
37
+ - **Primary keyword** — cannot audit keyword rules without this. If missing, ask for it.
38
+
39
+ Everything else below is optional. If not provided, mark those rules as āš ļø Unverifiable and proceed:
40
+
41
+ | Input | Required? | Notes |
42
+ |---|---|---|
43
+ | Full blog content (body text) | āœ… Yes | Paste or file — only this blocks the audit |
44
+ | Primary keyword | āœ… Yes | Only this blocks the audit |
45
+ | Page title / H1 | Optional | Flag URL/title rules as āš ļø if absent |
46
+ | Meta title | Optional | Flag meta rules as āš ļø if absent |
47
+ | Meta description | Optional | Flag meta rules as āš ļø if absent |
48
+ | URL / slug | Optional | Often not set pre-publish — flag as āš ļø Unverifiable |
49
+ | Secondary keywords | Optional | List if available |
50
+ | Tertiary keywords | Optional | |
51
+ | Image list (filenames, alt text, sizes, formats) | Optional | Flag image rules as āš ļø if absent |
52
+ | Internal links used (anchor text + destination) | Optional | Flag as āš ļø if absent |
53
+ | External links used (anchor text + destination) | Optional | Flag as āš ļø if absent |
54
+ | Instagram carousel (description or file) | Optional | Required per guidelines — flag as āŒ if not submitted |
55
+ | Word count | Optional | Estimate from content if not provided |
56
+
57
+ ---
58
+
59
+ ## Step 3 — Run the audit
60
+
61
+ Go through `references/guidelines.md` section by section. For **every rule**, determine:
62
+
63
+ - āœ… **PASS** — rule is clearly met
64
+ - āŒ **FAIL** — rule is clearly violated
65
+ - āš ļø **UNVERIFIABLE** — cannot be checked from submitted inputs (note what's needed)
66
+ - šŸ’” **SUGGESTION** — passes technically but could be improved
67
+
68
+ Do NOT skip any rule. Do NOT merge rules together unless they are genuinely a single atomic check.
69
+
70
+ ---
71
+
72
+ ## Step 4 — Produce the report
73
+
74
+ Save the report as `/mnt/user-data/outputs/seo-audit-report.md` using the exact template below.
75
+
76
+ ---
77
+
78
+ ## Report Template
79
+
80
+ ```markdown
81
+ # SEO Audit Report — [Blog Title]
82
+ **Audited on:** [Date]
83
+ **Primary Keyword:** [keyword]
84
+ **URL / Slug:** [url]
85
+ **Word Count:** [count or estimated]
86
+ **Overall Score:** [X / 100] (see scoring below)
87
+
88
+ ---
89
+
90
+ ## Executive Summary
91
+
92
+ [3–5 sentence overview: what's in good shape, what are the critical gaps, top 3 actions to take immediately.]
93
+
94
+ ---
95
+
96
+ ## Priority Legend
97
+
98
+ | Priority | Meaning |
99
+ |---|---|
100
+ | šŸ”“ Critical | Will directly hurt rankings or disqualify the content |
101
+ | 🟠 High | Significant SEO impact, fix before publishing |
102
+ | 🟔 Medium | Noticeable impact, fix soon after publishing |
103
+ | 🟢 Low | Minor improvement, fix when convenient |
104
+
105
+ ---
106
+
107
+ ## Audit Results by Section
108
+
109
+ ### 1. AIO Optimization
110
+ | # | Rule | Status | Priority | Notes |
111
+ |---|---|---|---|---|
112
+ | 1.1 | Content uses question-answer format for AI summaries | [āœ…/āŒ/āš ļø] | [šŸ”“/🟠/🟔/🟢] | [specific finding] |
113
+
114
+ ---
115
+
116
+ ### 2. URL Structure
117
+ | # | Rule | Status | Priority | Notes |
118
+ |---|---|---|---|---|
119
+ | 2.1 | URL length < 60 characters | | | |
120
+ | 2.2 | URL is short and readable | | | |
121
+ | 2.3 | Exact primary keyword included in URL | | | |
122
+ | 2.4 | URL is unique (no duplicates in topic cluster) | | | |
123
+ | 2.5 | Hyphens used correctly (only where needed, lowercase) | | | |
124
+
125
+ ---
126
+
127
+ ### 3. Page Titles
128
+ | # | Rule | Status | Priority | Notes |
129
+ |---|---|---|---|---|
130
+ | 3.1 | Title length < 60 characters | | | |
131
+ | 3.2 | Only one H1 per page | | | |
132
+ | 3.3 | Only one Title per page | | | |
133
+ | 3.4 | H1 and Title both exist but are different | | | |
134
+ | 3.5 | Primary keyword towards beginning of title | | | |
135
+ | 3.6 | Title is unique | | | |
136
+ | 3.7 | H1 is unique | | | |
137
+ | 3.8 | Title is clickbait / encourages clicks | | | |
138
+
139
+ ---
140
+
141
+ ### 4. Blog/Hub Content Structure
142
+ | # | Rule | Status | Priority | Notes |
143
+ |---|---|---|---|---|
144
+ | 4.1 | Intro is short (max 2 paragraphs, 5–6 lines each) | | | |
145
+ | 4.2 | No huge build-up; problem + solution within first few lines | | | |
146
+ | 4.3 | Intro starts with a hook | | | |
147
+ | 4.4 | Primary keyword in 1st paragraph / 1st 10% of intro | | | |
148
+ | 4.5 | Intro does NOT mention "this blog is about" or repeat ToC | | | |
149
+ | 4.6 | Comparison table included (if relevant) | | | |
150
+ | 4.7 | Listicle included (if relevant) | | | |
151
+ | 4.8 | Vocabulary is simple, suitable for 25-year-old developer | | | |
152
+ | 4.9 | Tone is first person, story narration | | | |
153
+ | 4.10 | No analogies or distracting content | | | |
154
+ | 4.11 | Real companies / blog references included | | | |
155
+ | 4.12 | No babysitting / over-explanatory content | | | |
156
+ | 4.13 | Short paragraphs used throughout | | | |
157
+ | 4.14 | Bullet points and listicles used for LLM-friendliness | | | |
158
+ | 4.15 | Adequate transition words (Yoast standard) | | | |
159
+ | 4.16 | No consecutive sentences starting the same way | | | |
160
+ | 4.17 | Active voice preferred over passive | | | |
161
+ | 4.18 | Inclusive and respectful language used | | | |
162
+ | 4.19 | Word count ≄ 1500 words (min threshold) | | | |
163
+ | 4.20 | Word count within 1500–2500 range (or justified by competitor length) | | | |
164
+ | 4.21 | Content is accurate and up-to-date | | | |
165
+ | 4.22 | Content is credible and contextual | | | |
166
+ | 4.23 | Content matches search intent | | | |
167
+ | 4.24 | No paragraph exceeds 4 lines | | | |
168
+
169
+ ---
170
+
171
+ ### 5. Headings
172
+ | # | Rule | Status | Priority | Notes |
173
+ |---|---|---|---|---|
174
+ | 5.1 | Only one H1 on the page | | | |
175
+ | 5.2 | Proper H2/H3 hierarchy used | | | |
176
+ | 5.3 | Relevant keywords in H1/Title | | | |
177
+ | 5.4 | Relevant keywords in H2 tags | | | |
178
+
179
+ ---
180
+
181
+ ### 6. Image Optimization
182
+ | # | Rule | Status | Priority | Notes |
183
+ |---|---|---|---|---|
184
+ | 6.1 | No GIFs used | | | |
185
+ | 6.2 | Images used only when necessary | | | |
186
+ | 6.3 | Blog images in PNG format | | | |
187
+ | 6.4 | Hub/webpage images in WEBP format | | | |
188
+ | 6.5 | All images < 100 KB | | | |
189
+ | 6.6 | Images compressed without quality loss | | | |
190
+ | 6.7 | Image filenames are keywords | | | |
191
+ | 6.8 | Alt text includes keywords/synonyms and accurate description | | | |
192
+ | 6.9 | Images have descriptive title tags | | | |
193
+ | 6.10 | Images are unique (edited if downloaded from internet) | | | |
194
+
195
+ ---
196
+
197
+ ### 7. Keywords
198
+ | # | Rule | Status | Priority | Notes |
199
+ |---|---|---|---|---|
200
+ | 7.1 | Primary keyword usage matches search intent (not just density) | | | |
201
+ | 7.2 | Secondary keywords used in headings/sub-headings (not forced) | | | |
202
+ | 7.3 | Tertiary keyword density 0.5–0.75% | | | |
203
+ | 7.4 | LSI keywords used throughout | | | |
204
+ | 7.5 | Primary keyword search volume > 400/month | | | |
205
+ | 7.6 | Keyword variations ~0.5–1% of total word count | | | |
206
+ | 7.7 | Keyword variations maintain good readability | | | |
207
+
208
+ ---
209
+
210
+ ### 8. Internal Linking
211
+ | # | Rule | Status | Priority | Notes |
212
+ |---|---|---|---|---|
213
+ | 8.1 | Core/brand keywords interlinked | | | |
214
+ | 8.2 | Internally linked pages are relevant to each other | | | |
215
+ | 8.3 | Targeted anchor text used | | | |
216
+ | 8.4 | ≤ 5 internal links per 1000 words | | | |
217
+
218
+ ---
219
+
220
+ ### 9. External Links
221
+ | # | Rule | Status | Priority | Notes |
222
+ |---|---|---|---|---|
223
+ | 9.1 | Links to reputable and relevant external sites | | | |
224
+ | 9.2 | All external links use target="_blank" | | | |
225
+ | 9.3 | External anchor text is generic (not targeting ranked keywords) | | | |
226
+
227
+ ---
228
+
229
+ ### 10. Meta Description
230
+ | # | Rule | Status | Priority | Notes |
231
+ |---|---|---|---|---|
232
+ | 10.1 | Length 150–160 characters | | | |
233
+ | 10.2 | Targeted keywords included | | | |
234
+ | 10.3 | Meta keywords match content (Bing spam check) | | | |
235
+ | 10.4 | Gives clear description of page content | | | |
236
+ | 10.5 | Unique meta description | | | |
237
+ | 10.6 | Encourages clicks (clickbait quality) | | | |
238
+
239
+ ---
240
+
241
+ ### 11. Meta Title
242
+ | # | Rule | Status | Priority | Notes |
243
+ |---|---|---|---|---|
244
+ | 11.1 | Primary keyword towards beginning | | | |
245
+ | 11.2 | Length ≤ 60 characters | | | |
246
+ | 11.3 | Matches search intent | | | |
247
+ | 11.4 | Not an exact copy of competitors' meta titles | | | |
248
+ | 11.5 | Unique meta title | | | |
249
+
250
+ ---
251
+
252
+ ### 12. Instagram Carousel
253
+ | # | Rule | Status | Priority | Notes |
254
+ |---|---|---|---|---|
255
+ | 12.1 | Carousel post created for this blog | | | |
256
+ | 12.2 | Dimensions 1080 Ɨ 1350 px | | | |
257
+ | 12.3 | 4–7 slides (or more if needed) | | | |
258
+ | 12.4 | Dark mode theme | | | |
259
+ | 12.5 | Clean modern font used (Helvetica/Poppins/Roboto/Open Sans) | | | |
260
+ | 12.6 | Slide 1 has blog topic/keyword as title, bold typography, minimal clutter | | | |
261
+ | 12.7 | 3–5 bullets per slide | | | |
262
+ | 12.8 | Tone is educational + engaging (not robotic/AI) | | | |
263
+ | 12.9 | Follows suggested structure (Intro → Key Insights → Benefits → CTA) | | | |
264
+ | 12.10 | CTA slide ends with "Follow @Keploy for more!" | | | |
265
+ | 12.11 | Created in Canva or Figma | | | |
266
+ | 12.12 | Writer's photo (circular) + name + Instagram ID included on post | | | |
267
+
268
+ ---
269
+
270
+ ## Issues Summary
271
+
272
+ ### šŸ”“ Critical Issues
273
+ [List each critical failure with the rule ID, what was found, and exactly what to fix.]
274
+
275
+ ### 🟠 High Priority Issues
276
+ [List each high-priority failure.]
277
+
278
+ ### 🟔 Medium Priority Issues
279
+ [List each medium-priority issue.]
280
+
281
+ ### 🟢 Low Priority / Suggestions
282
+ [List minor improvements and suggestions.]
283
+
284
+ ### āš ļø Unverifiable Items
285
+ [List every item that could not be checked due to missing inputs, and specify what information is needed to verify it.]
286
+
287
+ ---
288
+
289
+ ## Action Plan
290
+
291
+ List the top 10 fixes in order of priority, formatted as a checklist:
292
+
293
+ - [ ] [Action 1 — most critical]
294
+ - [ ] [Action 2]
295
+ - [ ] ...
296
+
297
+ ---
298
+
299
+ ## Scoring
300
+
301
+ Score out of 100. Deduct points as follows:
302
+
303
+ | Severity | Deduction per issue |
304
+ |---|---|
305
+ | šŸ”“ Critical | –8 points |
306
+ | 🟠 High | –4 points |
307
+ | 🟔 Medium | –2 points |
308
+ | 🟢 Low | –0.5 points |
309
+ | āš ļø Unverifiable | –1 point (assumed gap) |
310
+
311
+ **Total deductions:** [X]
312
+ **Final Score:** [100 – X] / 100
313
+
314
+ > Score 90–100: Publish-ready | 75–89: Minor fixes needed | 60–74: Significant gaps | <60: Major rework required
315
+
316
+ ---
317
+
318
+ *Report generated by Keploy SEO Audit Skill. Guidelines source: Keploy SEO Content Guidelines (internal).*
319
+ ```
320
+
321
+ ---
322
+
323
+ ## Step 5 — Chat summary
324
+
325
+ After saving the file, print this in the chat:
326
+
327
+ ```
328
+ āœ… Audit complete. Report saved to: seo-audit-report.md
329
+
330
+ šŸ“Š Score: [X/100]
331
+ šŸ”“ Critical: [N] | 🟠 High: [N] | 🟔 Medium: [N] | 🟢 Low: [N] | āš ļø Unverifiable: [N]
332
+
333
+ Top 3 immediate fixes:
334
+ 1. [most critical issue]
335
+ 2. [second most critical]
336
+ 3. [third most critical]
337
+ ```
338
+
339
+ ---
340
+
341
+ ## Notes for the auditor
342
+
343
+ - If the user provides content as a file, read it first before starting the audit.
344
+ - If partial inputs are provided (e.g., no image list), mark all image rules as āš ļø UNVERIFIABLE with a note saying "Image metadata not provided."
345
+ - Instagram carousel is **required** per guidelines. If not submitted, all 12 carousel rules are āŒ FAIL.
346
+ - Never invent data. Never assume a rule is met if you cannot verify it from the inputs.
347
+ - Keep your notes in the table cells specific and actionable — not generic ("keyword missing" is bad; "Primary keyword 'API testing' not found in first paragraph" is good).
@@ -0,0 +1,124 @@
1
+ # Keploy SEO Content Guidelines — Authoritative Reference
2
+
3
+ > This file is the single source of truth for all audit checks. Every section and every rule must be audited. No additions, subtractions, or modifications allowed.
4
+
5
+ ---
6
+
7
+ ## 1. AIO Optimization
8
+ - Content must use question-answer format so it gets pulled into AI summaries.
9
+
10
+ ---
11
+
12
+ ## 2. URL Structure
13
+ - Length: Less than 60 characters.
14
+ - Keep URLs short and readable.
15
+ - Include exact primary keyword in URL.
16
+ - No 2 URLs should be exactly the same (check for duplicacy within topic clusters).
17
+ - Use hyphens (-) to separate words with small casing. Only use hyphens where really needed (overuse can look AI-generated).
18
+
19
+ ---
20
+
21
+ ## 3. Page Titles
22
+ - Length: Keep under 60 characters.
23
+ - Only one H1 & one Title per page. They must both exist but be different from each other.
24
+ - Include the primary keyword towards the beginning of the title.
25
+ - Each page must have a unique title and H1.
26
+ - Title must be clickbait — it must encourage the user to click.
27
+
28
+ ---
29
+
30
+ ## 4. Blog/Hub Content Structure
31
+ - Intro: Short — not more than two paragraphs, 5–6 lines each.
32
+ - No huge build-up. Highlight the problem statement in 3–4 lines and start with the solution.
33
+ - Intro must start with a hook.
34
+ - Primary keyword must appear in the 1st paragraph / 1st 10% of the introduction.
35
+ - Do NOT mention what this blog is about or repeat the table of contents in the intro.
36
+ - Add a comparison table and listicle if relevant to the topic.
37
+ - Vocabulary: Simple, easy, suitable for a 25-year-old developer audience in English.
38
+ - Tone: First person, story narration style. No analogies or distracting content.
39
+ - Add references to real companies' blogs or their names to connect to examples, success/failure cases. No babysitting content.
40
+ - Easy vocab. Short paragraphs for better indexing. Bullet points and listicles for LLM-friendliness.
41
+ - Readability: Must pass Yoast real-time content analysis standards — required % of transition words, no consecutive sentences starting the same way, active voice preferred over passive.
42
+ - Use inclusive and respectful language. Avoid offensive, biased, or judgmental words/phrases.
43
+ - Length: Minimum 1500–2500 words (also check competitor length for that keyword).
44
+ - Quality: Accurate, Authoritative, Up-to-date, Complementary, Credible, Transparent, Contextual.
45
+ - Relevance: Content must match search intent (direct match, semantic equivalents, multiple potential intents).
46
+ - Readability: Keep content concise. Reference BrowserStack, TestSigma, Katalon writing styles.
47
+ - Freshness: Old content must be refreshed with new information.
48
+ - Paragraph limit: A paragraph must NOT be more than 4 lines.
49
+
50
+ ---
51
+
52
+ ## 5. Headings (H1, H2, H3)
53
+ - Only one H1/Title per page.
54
+ - Use H2 and H3 for subheadings in proper hierarchy.
55
+ - Include relevant keywords in headings, especially in H1/Title and H2 tags.
56
+
57
+ ---
58
+
59
+ ## 6. Image Optimization
60
+ - No GIFs. Use images only when necessary.
61
+ - Format: WEBP for hubs and webpages; PNG for blogs.
62
+ - File size: Less than 100 KB.
63
+ - Compress images without losing quality.
64
+ - File name must be a keyword.
65
+ - Alt text must include keywords/synonyms and accurate descriptions.
66
+ - Use descriptive title tags for images.
67
+ - Images must be unique — if downloaded from the internet, must be edited in Canva (e.g., collage of 2+ images).
68
+
69
+ ---
70
+
71
+ ## 7. Keywords
72
+ - Primary keyword density: No fixed ideal — match search intent over keyword density.
73
+ - Secondary keywords: Use in headings and sub-headings whenever possible. Do NOT forcefully insert.
74
+ - Tertiary keyword density: 0.5–0.75%.
75
+ - LSI keywords: Not optional — use relevant LSI keywords whenever possible to match search intent.
76
+ - Search volume: Greater than 400 searches/month is ideal. Range: 400–2000 searches/month.
77
+ - Keyword variations: Aim for 0.5–1% of total word count. Maintain good readability.
78
+
79
+ ---
80
+
81
+ ## 8. Internal Linking
82
+ - Try to interlink core/brand keywords + ones relevant to the topic.
83
+ - Internally linked pages must be relevant to each other.
84
+ - Use targeted anchor text.
85
+ - Maximum 5 internal links per 1000 words.
86
+
87
+ ---
88
+
89
+ ## 9. External Links
90
+ - Link to reputable and relevant external sites (stats, research, collaborations, image sources, relevant tweets).
91
+ - Use target="_blank" to open in new tabs.
92
+ - External link anchor text must be generic — never target keywords you want to rank for.
93
+
94
+ ---
95
+
96
+ ## 10. Meta Descriptions
97
+ - Length: 150–160 characters.
98
+ - Include targeted keywords (for Google). Note: Bing uses meta keywords as a spam indicator if keywords not found in content.
99
+ - Must give a clear description of page content.
100
+ - Each page must have a unique meta description.
101
+ - Must be clickbait — encourage people to click.
102
+
103
+ ---
104
+
105
+ ## 11. Meta Title
106
+ - Include primary keyword, preferably towards the beginning.
107
+ - Character limit: ≤ 60 characters.
108
+ - Keep search intent in mind.
109
+ - Must NOT be an exact copy of competitors' meta titles.
110
+ - Must be unique for every page.
111
+
112
+ ---
113
+
114
+ ## 12. Instagram Carousel Post (Required for Every Blog)
115
+ - Every blog must include an Instagram carousel post as part of the Writers Program.
116
+ - Dimensions: 1080 Ɨ 1350 px (Instagram portrait size).
117
+ - Slides: 4–7 slides minimum (can be more if needed).
118
+ - Theme: Dark mode (match Keploy's Instagram aesthetic).
119
+ - Fonts: Clean, modern fonts — Helvetica (Regular/Bold), Poppins (Rounded), Roboto, or Open Sans.
120
+ - Slide 1 (Cover): Blog topic/keyword as title. Bold, modern typography. Minimal clutter.
121
+ - Content: 3–5 bullets per slide. Tone: Educational + engaging (not robotic or AI-generated).
122
+ - Suggested structure: (1) Intro/Definition, (2–3) Key Insights, (4) Benefits/Examples, (5) Outro/CTA with "Follow @Keploy for more!"
123
+ - Tools preferred: Canva or Figma.
124
+ - Writers must add their photo (circular) + name + Instagram ID on the post for shoutout/recognition.