Executive Summary
\nThis report provides a comprehensive analysis of content issues found on ${websiteDomain}. We've identified ${totalIssues} issues across ${auditData.summary.pages} pages that need attention to improve SEO performance and user experience.
\n \nKey Recommendations
\n- \n ${getTopRecommendations(auditData).map(rec => `
- ${rec.text} ${rec.priority} `).join('')}\n
Issues Breakdown
\n \nContent Quality
\nTechnical SEO
\nOn-Page SEO
\nInternal Linking
\nPerformance
\nStatus Issues
\n \n404 Errors (${(auditData.issues.statusIssues.pages404 || []).length})
\n ${(auditData.issues.statusIssues.pages404 || []).length === 0 ? \n `No issues found.
` : \n (() => {\n const items = auditData.issues.statusIssues.pages404 || [];\n const showInitial = 10; // Number of rows to show initially\n const hasMoreItems = items.length > showInitial;\n const initialItems = hasMoreItems ? items.slice(0, showInitial) : items;\n const hiddenItems = hasMoreItems ? items.slice(showInitial) : [];\n \n return `\nURL | \nSource Links | \nRecommendation | \n
---|---|---|
${item.url} | \n\n ${item.sources && item.sources.length > 0 ? \n `\n \n ${renderSourceLinks(item.sources)}\n ` : \n `No source links found`\n }\n | \n ${item.todo} | \n
${item.url} | \n\n ${item.sources && item.sources.length > 0 ? \n `\n \n ${renderSourceLinks(item.sources)}\n ` : \n `No source links found`\n }\n | \n ${item.todo} | \n
301 Redirects (${(auditData.issues.statusIssues.redirects301 || []).length})
\n ${(auditData.issues.statusIssues.redirects301 || []).length === 0 ? \n `No issues found.
` : \n (() => {\n const items = auditData.issues.statusIssues.redirects301 || [];\n const showInitial = 10; // Number of rows to show initially\n const hasMoreItems = items.length > showInitial;\n const initialItems = hasMoreItems ? items.slice(0, showInitial) : items;\n const hiddenItems = hasMoreItems ? items.slice(showInitial) : [];\n \n return `\nURL | \nSource Links | \nRecommendation | \n
---|---|---|
${item.url} | \n\n ${item.sources && item.sources.length > 0 ? \n `\n \n ${renderSourceLinks(item.sources)}\n ` : \n `No source links found`\n }\n | \n ${item.todo} | \n
${item.url} | \n\n ${item.sources && item.sources.length > 0 ? \n `\n \n ${renderSourceLinks(item.sources)}\n ` : \n `No source links found`\n }\n | \n ${item.todo} | \n
Canonicalization Issues (${(auditData.issues.statusIssues.canonicalised || []).length})
\n ${renderTableSection(auditData.issues.statusIssues.canonicalised, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Canonical URL', render: item => item.canonical || '—' },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\nContent Quality Issues\n \n Outdated Content (${(auditData.issues.contentQuality.staleLastModified || []).length})
\n ${renderTableSection(auditData.issues.contentQuality.staleLastModified, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Last Modified', render: item => item.lastModified },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n Thin Content (${(auditData.issues.contentQuality.thinContent || []).length})
\n ${renderTableSection(auditData.issues.contentQuality.thinContent, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Word Count', render: item => item.words },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n Readability Issues (${(auditData.issues.contentQuality.readability || []).length})
\n ${renderTableSection(auditData.issues.contentQuality.readability, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'F-K Score', render: item => item.score.toFixed(1) },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n Outdated Meta Years (${(auditData.issues.contentQuality.outdatedMetaYear || []).length})
\n ${renderTableSection(auditData.issues.contentQuality.outdatedMetaYear, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Field', render: item => item.field },\n { header: 'Years', render: item => item.years },\n { header: 'Original Text', render: item => item.original },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n Large HTML (${(auditData.issues.contentQuality.largeHTML || []).length})
\n ${renderTableSection(auditData.issues.contentQuality.largeHTML, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Size (bytes)', render: item => item.size ? item.size.toLocaleString() : 'N/A' },\n { header: 'DOM Size (bytes)', render: item => item.totalDom ? item.totalDom.toLocaleString() : 'N/A' },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n
Metadata & SEO Issues
\n \nTitle Length Issues (${(auditData.issues.metadataSEO.titleLength || []).length})
\n ${renderTableSection(auditData.issues.metadataSEO.titleLength, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Length', render: item => `${item.length} characters` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \nDescription Length Issues (${(auditData.issues.metadataSEO.descriptionLength || []).length})
\n ${renderTableSection(auditData.issues.metadataSEO.descriptionLength, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Length', render: item => `${item.length} characters` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \nMissing Titles (${(auditData.issues.metadataSEO.missingTitle || []).length})
\n ${renderTableSection(auditData.issues.metadataSEO.missingTitle, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \nMissing Descriptions (${(auditData.issues.metadataSEO.missingDescription || []).length})
\n ${renderTableSection(auditData.issues.metadataSEO.missingDescription, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \nDuplicate Titles (${(auditData.issues.metadataSEO.duplicateTitle || []).length})
\n ${renderTableSection(auditData.issues.metadataSEO.duplicateTitle, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Title', render: item => item.title },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \nDuplicate Descriptions (${(auditData.issues.metadataSEO.duplicateDescription || []).length})
\n ${renderTableSection(auditData.issues.metadataSEO.duplicateDescription, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Description', render: item => item.description },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \nH1 Issues (${(auditData.issues.metadataSEO.h1Issues || []).length})
\n ${renderTableSection(auditData.issues.metadataSEO.h1Issues, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'H1 Count', render: item => item.h1Count },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\nInternal Linking Issues
\n \nExcessive Click Depth (${(auditData.issues.internalLinking.excessiveClickDepth || []).length})
\n ${renderTableSection(auditData.issues.internalLinking.excessiveClickDepth, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Click Depth', render: item => item.depth },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \nOrphan Pages (${(auditData.issues.internalLinking.orphanPages || []).length})
\n ${renderTableSection(auditData.issues.internalLinking.orphanPages, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \nLow Internal Links (${(auditData.issues.internalLinking.lowInternalLinks || []).length})
\n ${renderTableSection(auditData.issues.internalLinking.lowInternalLinks, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Internal Links', render: item => item.links },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\nPerformance Issues
\n \nUnderperforming Content (${(auditData.issues.underperformingContent || []).length})
\n ${renderTableSection(auditData.issues.underperformingContent, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Clicks', render: item => item.clicks },\n { header: 'Impressions', render: item => item.impressions },\n { header: 'Last Modified', render: item => item.lastModified },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\nAll Pages Overview
\nBelow is a summary of all pages analyzed with their respective issues flagged.
\n \n ${(() => {\n const items = auditData.pages || [];\n const showInitial = 10; // Number of rows to show initially\n const hasMoreItems = items.length > showInitial;\n const initialItems = hasMoreItems ? items.slice(0, showInitial) : items;\n const hiddenItems = hasMoreItems ? items.slice(showInitial) : [];\n \n return `\nURL | \nIssues | \nClicks | \nImpressions | \n
---|---|---|---|
${page.url} | \n${page.flags.map(flag => `${formatFlagName(flag)}`).join('')} | \n${page.clicks !== null ? page.clicks : 'N/A'} | \n${page.impressions !== null ? page.impressions : 'N/A'} | \n
${page.url} | \n${page.flags.map(flag => `${formatFlagName(flag)}`).join('')} | \n${page.clicks !== null ? page.clicks : 'N/A'} | \n${page.impressions !== null ? page.impressions : 'N/A'} | \n
Recommended Next Steps
\nBased on our analysis, we recommend the following actions to improve your content performance:
\n \nPriority Actions
\n- \n ${auditData.summary.issues['404'] > 0 ? \n `
- Fix 404 errors by restoring pages or implementing proper redirects ` : ''}\n ${auditData.summary.issues.redirects > 0 ? \n `
- Update internal links to point directly to final URLs instead of through redirects ` : ''}\n ${auditData.summary.issues.thin > 0 ? \n `
- Expand thin content pages to at least 1,500 words with valuable, unique information ` : ''}\n ${auditData.summary.issues.outdated > 0 ? \n `
- Update all content that hasn't been refreshed in the last 12 months ` : ''}\n ${auditData.summary.issues.missingOrDuplicateMeta > 0 ? \n `
- Add unique meta descriptions to all pages missing them ` : ''}\n ${auditData.summary.issues.titleLen > 0 ? \n `
- Optimize page titles to be between 40-60 characters ` : ''}\n ${auditData.summary.issues.descriptionLen > 0 ? \n `
- Optimize meta descriptions to be between 70-155 characters ` : ''}\n ${auditData.summary.issues.readability > 0 ? \n `
- Improve content readability by simplifying language and shortening sentences ` : ''}\n ${auditData.summary.issues.underperforming > 0 ? \n `
- Identify keywords with potential for pages with high impressions but low clicks ` : ''}\n ${auditData.summary.issues.orphan > 0 ? \n `
- Create internal links to orphan pages to improve crawlability ` : ''}\n ${auditData.summary.issues.lowInternalLinks > 0 ? \n `
- Improve internal linking between related content ` : ''}\n
- Implement a content calendar to regularly refresh content \n
- Conduct keyword research to identify new content opportunities \n
Implementation Timeline
\nWe recommend addressing these issues in the following order:
\n \n- \n
- Immediate (1-2 weeks): Fix technical issues like 404 errors, redirects, missing meta descriptions, and outdated year references. \n
- Short-term (2-4 weeks): Update thin content and improve readability on key pages. \n
- Medium-term (1-2 months): Refresh outdated content, especially on high-impression pages. \n
- Long-term (2-3 months): Implement a content calendar to regularly update content and prevent future staleness. \n