4.4 KiB
4.4 KiB
Linker Module
Last Verified: January 20, 2026
Version: 1.8.4
Status: ⏸️ Inactive (Disabled by Default)
Backend Path: backend/igny8_core/modules/linker/
Frontend Path: frontend/src/pages/Linker/
Module Status
| Aspect | Current State | Notes |
|---|---|---|
| Backend API | ✅ Implemented | Endpoints functional |
| Frontend Pages | ✅ Implemented | UI exists |
| Sidebar Nav | ⚠️ Conditional | Hidden when disabled |
| Route Protection | ❌ Not Protected | Direct URL access still works |
| Dashboard References | ❌ Not Hidden | May show in dashboard |
| Default State | Disabled | linker_enabled = True in model, but typically disabled |
⚠️ Pending Implementation: Extend module disable to route-level protection and all page references.
Quick Reference
| What | File | Key Items |
|---|---|---|
| Views | modules/linker/views.py |
LinkerViewSet |
| API | modules/linker/urls.py |
Linker endpoints |
| Frontend Pages | pages/Linker/index.tsx |
Linker overview |
| Frontend Pages | pages/Linker/LinkerContent.tsx |
Content for linking |
| API Client | api/linker.api.ts |
linkerApi |
| Module Control | modules/system/settings_models.py |
ModuleEnableSettings.linker_enabled |
Purpose
The Linker module provides internal linking automation:
- Identify link opportunities in content
- Suggest relevant internal links
- Auto-inject links into content body
API Endpoints
| Method | Path | Handler | Purpose |
|---|---|---|---|
| POST | /api/v1/linker/process/ |
LinkerViewSet.process |
Process single content for linking |
| POST | /api/v1/linker/batch_process/ |
LinkerViewSet.batch_process |
Process multiple content items |
Process Request
{
"content_id": 123,
"max_links": 5,
"anchor_strategy": "exact_match"
}
Process Response
{
"content_id": 123,
"links_added": 3,
"link_opportunities": [
{
"anchor_text": "SEO optimization",
"target_url": "/blog/seo-guide/",
"target_content_id": 456,
"position": 234,
"confidence": 0.85
}
]
}
Business Logic
Link Candidate Discovery
Trigger: User initiates linking process
Flow:
- Load source content body
- Extract potential anchor phrases
- Find matching content by:
- Keyword overlap
- Title similarity
- Same sector/industry
- Score candidates by relevance
- Filter to avoid over-linking
Link Injection
Trigger: User approves link suggestions
Flow:
- Locate anchor text in content
- Wrap in
<a>tag with target URL - Ensure no nested links
- Save updated content body
Module Enable Control
Backend Model
# modules/system/settings_models.py
class ModuleEnableSettings(AccountBaseModel):
linker_enabled = models.BooleanField(default=True)
Frontend Check
// layout/AppSidebar.tsx
if (isModuleEnabled('linker')) {
workflowItems.push({
name: "Linker",
path: "/linker/content",
});
}
Current Limitation
Direct URL access to /linker/* routes still works even when module is disabled.
Frontend Pages
Linker Overview (/linker)
- Module overview
- Quick stats
- Start linking action
Content for Linking (/linker/content)
- List of content available for linking
- Link status indicators
- Process button per content
- Batch processing action
Integration Points
| From | To | Trigger |
|---|---|---|
| Content | Linker | Manual process |
| Linker | Content | Link injection |
| Automation | Linker | Automated linking (future) |
Common Issues
| Issue | Cause | Fix |
|---|---|---|
| Module visible when disabled | Only sidebar hidden | Pending: route protection |
| No link candidates | No matching content | Create more related content |
| Links broken | Target content deleted | Validate target exists |
Planned Changes
| Feature | Status | Description |
|---|---|---|
| Route-level protection | 🔜 Pending | Block access when module disabled |
| Dashboard card hiding | 🔜 Pending | Hide from dashboard when disabled |
| Automation integration | 🔜 Planned | Add to automation pipeline |
| Link density control | 🔜 Planned | Prevent over-linking |
| External link support | 🔜 Planned | Add outbound links |