Skip to content

Commit 34f73ee

Browse files
author
TechStack Global
committed
fix(internal-links): final refinement for contextual linking & over-linking split
1 parent d85ab1d commit 34f73ee

13 files changed

Lines changed: 1741 additions & 449 deletions

audit_report_utf8.txt

Lines changed: 322 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,322 @@
1+
=== BEGINNING SEO INFRASTRUCTURE AUDIT ===
2+
3+
PAGE: /about.html
4+
Title: OK (Length: 57)
5+
Meta Description: OK (Length: 108)
6+
Canonical: OK
7+
OpenGraph: OK
8+
Twitter Card: OK
9+
Schema: OK
10+
H1 Count: 1
11+
Viewport: OK
12+
Indexing: OK
13+
Broken Links: None
14+
--------------------------------
15+
PAGE: /affiliate-disclosure.html
16+
Title: OK (Length: 39)
17+
Meta Description: OK (Length: 126)
18+
Canonical: OK
19+
OpenGraph: MISSING TAGS: og:title, og:description, og:type
20+
Twitter Card: OK
21+
Schema: OK
22+
H1 Count: 1
23+
Viewport: OK
24+
Indexing: OK
25+
Broken Links: None
26+
--------------------------------
27+
PAGE: /amazon-stack.html
28+
Title: OK (Length: 62)
29+
Meta Description: OK (Length: 137)
30+
Canonical: OK
31+
OpenGraph: MISSING TAGS: og:title, og:description, og:type
32+
Twitter Card: OK
33+
Schema: OK
34+
H1 Count: 1
35+
Viewport: OK
36+
Indexing: OK
37+
Broken Links: None
38+
--------------------------------
39+
PAGE: /blog.html
40+
Title: OK (Length: 49)
41+
Meta Description: OK (Length: 158)
42+
Canonical: OK
43+
OpenGraph: OK
44+
Twitter Card: OK
45+
Schema: OK
46+
H1 Count: 1
47+
Viewport: OK
48+
Indexing: OK
49+
Broken Links: None
50+
--------------------------------
51+
PAGE: /contact.html
52+
Title: OK (Length: 57)
53+
Meta Description: OK (Length: 137)
54+
Canonical: OK
55+
OpenGraph: OK
56+
Twitter Card: OK
57+
Schema: OK
58+
H1 Count: 1
59+
Viewport: OK
60+
Indexing: OK
61+
Broken Links: None
62+
--------------------------------
63+
PAGE: /index.html
64+
Title: OK (Length: 41)
65+
Meta Description: OK (Length: 190)
66+
Canonical: OK
67+
OpenGraph: OK
68+
Twitter Card: OK
69+
Schema: OK
70+
H1 Count: 1
71+
Viewport: OK
72+
Indexing: OK
73+
Broken Links: None
74+
--------------------------------
75+
PAGE: /privacy-policy.html
76+
Title: OK (Length: 33)
77+
Meta Description: OK (Length: 137)
78+
Canonical: OK
79+
OpenGraph: MISSING TAGS: og:title, og:description, og:type
80+
Twitter Card: OK
81+
Schema: OK
82+
H1 Count: 1
83+
Viewport: OK
84+
Indexing: OK
85+
Broken Links: None
86+
--------------------------------
87+
PAGE: /terms-of-service.html
88+
Title: OK (Length: 35)
89+
Meta Description: OK (Length: 138)
90+
Canonical: OK
91+
OpenGraph: MISSING TAGS: og:title, og:description, og:type
92+
Twitter Card: OK
93+
Schema: OK
94+
H1 Count: 1
95+
Viewport: OK
96+
Indexing: OK
97+
Broken Links: None
98+
--------------------------------
99+
PAGE: /thank-you.html
100+
Title: OK (Length: 28)
101+
Meta Description: OK (Length: 46)
102+
Canonical: OK
103+
OpenGraph: OK
104+
Twitter Card: OK
105+
Schema: OK
106+
H1 Count: 1
107+
Viewport: OK
108+
Indexing: OK (Intentional Noindex)
109+
Broken Links: None
110+
--------------------------------
111+
PAGE: /posts/apple-macbook-pro-m4-pro-review.html
112+
Title: OK (Length: 57)
113+
Meta Description: OK (Length: 142)
114+
Canonical: OK
115+
OpenGraph: MISSING TAGS: og:title, og:description, og:type
116+
Twitter Card: OK
117+
Schema: OK
118+
H1 Count: 1
119+
Viewport: OK
120+
Indexing: OK
121+
Broken Links: None
122+
--------------------------------
123+
PAGE: /posts/best-laptops-for-students-2026.html
124+
Title: OK (Length: 49)
125+
Meta Description: OK (Length: 169)
126+
Canonical: OK
127+
OpenGraph: MISSING TAGS: og:title, og:description, og:type
128+
Twitter Card: OK
129+
Schema: OK
130+
H1 Count: 1
131+
Viewport: OK
132+
Indexing: OK
133+
Broken Links: None
134+
--------------------------------
135+
PAGE: /posts/best-premium-laptop-for-work-2026.html
136+
Title: OK (Length: 55)
137+
Meta Description: OK (Length: 173)
138+
Canonical: OK
139+
OpenGraph: OK
140+
Twitter Card: OK
141+
Schema: OK
142+
H1 Count: 1
143+
Viewport: OK
144+
Indexing: OK
145+
Broken Links: None
146+
--------------------------------
147+
PAGE: /posts/best-remote-work-setup-2026.html
148+
Title: OK (Length: 54)
149+
Meta Description: OK (Length: 155)
150+
Canonical: OK
151+
OpenGraph: OK
152+
Twitter Card: OK
153+
Schema: OK
154+
H1 Count: 1
155+
Viewport: OK
156+
Indexing: OK
157+
Broken Links: None
158+
--------------------------------
159+
PAGE: /posts/budget-laptops-under-1000.html
160+
Title: OK (Length: 57)
161+
Meta Description: OK (Length: 164)
162+
Canonical: OK
163+
OpenGraph: MISSING TAGS: og:title, og:description, og:type
164+
Twitter Card: OK
165+
Schema: OK
166+
H1 Count: 1
167+
Viewport: OK
168+
Indexing: OK
169+
Broken Links: None
170+
--------------------------------
171+
PAGE: /posts/dell-thunderbolt-smart-dock-review.html
172+
Title: OK (Length: 68)
173+
Meta Description: OK (Length: 180)
174+
Canonical: OK
175+
OpenGraph: OK
176+
Twitter Card: OK
177+
Schema: OK
178+
H1 Count: 1
179+
Viewport: OK
180+
Indexing: OK
181+
Broken Links: None
182+
--------------------------------
183+
PAGE: /posts/dell-xps-15-9530-review.html
184+
Title: OK (Length: 54)
185+
Meta Description: OK (Length: 151)
186+
Canonical: OK
187+
OpenGraph: OK
188+
Twitter Card: OK
189+
Schema: OK
190+
H1 Count: 1
191+
Viewport: OK
192+
Indexing: OK
193+
Broken Links: None
194+
--------------------------------
195+
PAGE: /posts/do-you-need-thunderbolt-dock.html
196+
Title: OK (Length: 41)
197+
Meta Description: OK (Length: 148)
198+
Canonical: OK
199+
OpenGraph: OK
200+
Twitter Card: OK
201+
Schema: OK
202+
H1 Count: 1
203+
Viewport: OK
204+
Indexing: OK
205+
Broken Links: None
206+
--------------------------------
207+
PAGE: /posts/is-a-4k-monitor-worth-it.html
208+
Title: OK (Length: 49)
209+
Meta Description: OK (Length: 148)
210+
Canonical: OK
211+
OpenGraph: OK
212+
Twitter Card: OK
213+
Schema: OK
214+
H1 Count: 1
215+
Viewport: OK
216+
Indexing: OK
217+
Broken Links: None
218+
--------------------------------
219+
PAGE: /posts/is-samsung-990-pro-worth-it.html
220+
Title: OK (Length: 44)
221+
Meta Description: OK (Length: 158)
222+
Canonical: OK
223+
OpenGraph: OK
224+
Twitter Card: OK
225+
Schema: OK
226+
H1 Count: 1
227+
Viewport: OK
228+
Indexing: OK
229+
Broken Links: None
230+
--------------------------------
231+
PAGE: /posts/lg-27us500-w-ultrafine-monitor-review.html
232+
Title: OK (Length: 66)
233+
Meta Description: OK (Length: 171)
234+
Canonical: OK
235+
OpenGraph: OK
236+
Twitter Card: OK
237+
Schema: OK
238+
H1 Count: 1
239+
Viewport: OK
240+
Indexing: OK
241+
Broken Links: None
242+
--------------------------------
243+
PAGE: /posts/samsung-990-pro-ssd-review.html
244+
Title: OK (Length: 56)
245+
Meta Description: OK (Length: 171)
246+
Canonical: OK
247+
OpenGraph: OK
248+
Twitter Card: OK
249+
Schema: OK
250+
H1 Count: 1
251+
Viewport: OK
252+
Indexing: OK
253+
Broken Links: None
254+
--------------------------------
255+
PAGE: /posts/shure-sm7b-review.html
256+
Title: OK (Length: 59)
257+
Meta Description: OK (Length: 154)
258+
Canonical: OK
259+
OpenGraph: OK
260+
Twitter Card: OK
261+
Schema: OK
262+
H1 Count: 1
263+
Viewport: OK
264+
Indexing: OK
265+
Broken Links: best-headphones-for-classes.html
266+
--------------------------------
267+
PAGE: /posts/shure-sm7b-vs-sm7db.html
268+
Title: OK (Length: 50)
269+
Meta Description: OK (Length: 146)
270+
Canonical: OK
271+
OpenGraph: OK
272+
Twitter Card: OK
273+
Schema: OK
274+
H1 Count: 1
275+
Viewport: OK
276+
Indexing: OK
277+
Broken Links: None
278+
--------------------------------
279+
PAGE: /posts/shure-sm7db-review.html
280+
Title: OK (Length: 65)
281+
Meta Description: OK (Length: 133)
282+
Canonical: OK
283+
OpenGraph: OK
284+
Twitter Card: OK
285+
Schema: OK
286+
H1 Count: 1
287+
Viewport: OK
288+
Indexing: OK
289+
Broken Links: None
290+
--------------------------------
291+
PAGE: /posts/surface-laptop-studio-2-review.html
292+
Title: OK (Length: 47)
293+
Meta Description: OK (Length: 150)
294+
Canonical: OK
295+
OpenGraph: OK
296+
Twitter Card: OK
297+
Schema: OK
298+
H1 Count: 1
299+
Viewport: OK
300+
Indexing: OK
301+
Broken Links: None
302+
--------------------------------
303+
304+
305+
=== SECONDARY ISSUES REPORT ===
306+
307+
Duplicate Meta Descriptions: None
308+
309+
Duplicate Titles: None
310+
311+
Image Alt Text Issues:
312+
Image Alt Text: OK
313+
314+
315+
=== SITE RISK SUMMARY ===
316+
Total Pages Scanned: 25
317+
Pages With Critical Errors: 0
318+
Pages With Duplicate Meta: 0
319+
Pages With Duplicate Titles: 0
320+
Pages With Missing Schema: 0
321+
Pages With Missing Alt Text: 0
322+
Clean Pages: 25

cleanup_guide.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import os
2+
import re
3+
4+
BASE_DIR = os.getcwd()
5+
6+
files_to_update = [
7+
'posts/apple-macbook-pro-m4-pro-review.html',
8+
'posts/dell-xps-15-9530-review.html',
9+
'posts/surface-laptop-studio-2-review.html',
10+
'posts/shure-sm7b-review.html',
11+
'posts/samsung-990-pro-ssd-review.html',
12+
'posts/best-laptops-for-students-2026.html',
13+
'posts/budget-laptops-under-1000.html'
14+
]
15+
16+
# Pattern for the sidebar widget across different post styles
17+
# Style 1: With card-icon
18+
card_pattern = re.compile(r'<div class="mini-affiliate-card">\s*<div class="mini-card-icon">.*?best-headphones-for-classes\.html.*?</div>\s*</div>', re.DOTALL)
19+
# Style 2: Simple text link in card
20+
text_card_pattern = re.compile(r'<div class="mini-affiliate-card">\s*<div class="mini-card-text">\s*<h5>Best Headphones for Classes</h5>.*?View\s+Guide\s+→</a>\s*</div>\s*</div>', re.DOTALL)
21+
22+
for rel_path in files_to_update:
23+
abs_path = os.path.join(BASE_DIR, rel_path.replace('/', os.sep))
24+
if not os.path.exists(abs_path):
25+
print(f"File not found: {abs_path}")
26+
continue
27+
28+
with open(abs_path, 'r', encoding='utf-8') as f:
29+
content = f.read()
30+
31+
new_content = card_pattern.sub('', content)
32+
new_content = text_card_pattern.sub('', new_content)
33+
34+
if new_content != content:
35+
with open(abs_path, 'w', encoding='utf-8') as f:
36+
f.write(new_content)
37+
print(f"Updated: {rel_path}")
38+
else:
39+
print(f"No changes for: {rel_path}")
40+
41+
# Also delete the actual file
42+
target_file = os.path.join(BASE_DIR, 'posts', 'best-headphones-for-classes.html')
43+
if os.path.exists(target_file):
44+
os.remove(target_file)
45+
print(f"Deleted: {target_file}")

final_audit.txt

Whitespace-only changes.

final_pre_merge_audit.txt

Whitespace-only changes.

final_seo_report.txt

Whitespace-only changes.

0 commit comments

Comments
 (0)