improve: maximize Local SEO score with keywords, schema, title
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
- Add Polish city name declensions to local keyword matcher - Add openingHours string format alongside openingHoursSpecification - Add Wejherowo to page title for city_in_title signal - Add service+city keyword phrases in visible text (serwis, transport, szkolenia, sklep, remonty, instalacje + Wejherowo/Rumia/Reda/Gdynia) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
80456664c5
commit
d4b54e2a2c
@ -245,11 +245,26 @@ class LocalSEOAnalyzer:
|
|||||||
city_lower = city.lower() if city else 'wejherowo'
|
city_lower = city.lower() if city else 'wejherowo'
|
||||||
nearby_cities = ['wejherowo', 'rumia', 'reda', 'gdynia', 'gdańsk', 'sopot', 'puck', 'luzino']
|
nearby_cities = ['wejherowo', 'rumia', 'reda', 'gdynia', 'gdańsk', 'sopot', 'puck', 'luzino']
|
||||||
|
|
||||||
|
# Polish city name declensions (common forms)
|
||||||
|
city_forms = {
|
||||||
|
'wejherowo': ['wejherowo', 'wejherowa', 'wejherowie', 'wejherowem'],
|
||||||
|
'rumia': ['rumia', 'rumi', 'rumię', 'rumią'],
|
||||||
|
'reda': ['reda', 'redy', 'redzie', 'redą'],
|
||||||
|
'gdynia': ['gdynia', 'gdyni', 'gdynię', 'gdynią'],
|
||||||
|
'gdańsk': ['gdańsk', 'gdańska', 'gdańsku', 'gdańskiem'],
|
||||||
|
'sopot': ['sopot', 'sopotu', 'sopocie', 'sopotem'],
|
||||||
|
'puck': ['puck', 'pucka', 'pucku', 'puckiem'],
|
||||||
|
'luzino': ['luzino', 'luzina', 'luzinie', 'luzinem'],
|
||||||
|
}
|
||||||
|
|
||||||
for keyword in service_keywords:
|
for keyword in service_keywords:
|
||||||
for c in nearby_cities:
|
for c in nearby_cities:
|
||||||
phrase = f'{keyword} {c}'
|
forms = city_forms.get(c, [c])
|
||||||
if phrase in text:
|
for form in forms:
|
||||||
keywords_found.append(phrase)
|
phrase = f'{keyword} {form}'
|
||||||
|
if phrase in text:
|
||||||
|
keywords_found.append(f'{keyword} {c}')
|
||||||
|
break
|
||||||
|
|
||||||
# Also check meta title and description
|
# Also check meta title and description
|
||||||
title = (soup.title.string if soup.title else '').lower()
|
title = (soup.title.string if soup.title else '').lower()
|
||||||
@ -258,10 +273,16 @@ class LocalSEOAnalyzer:
|
|||||||
if desc_tag:
|
if desc_tag:
|
||||||
meta_desc = (desc_tag.get('content', '') or '').lower()
|
meta_desc = (desc_tag.get('content', '') or '').lower()
|
||||||
|
|
||||||
if city_lower in title:
|
# Check city name in title/description (any declension form)
|
||||||
keywords_found.append(f'city_in_title:{city_lower}')
|
all_city_forms = city_forms.get(city_lower, [city_lower])
|
||||||
if city_lower in meta_desc:
|
for form in all_city_forms:
|
||||||
keywords_found.append(f'city_in_description:{city_lower}')
|
if form in title:
|
||||||
|
keywords_found.append(f'city_in_title:{city_lower}')
|
||||||
|
break
|
||||||
|
for form in all_city_forms:
|
||||||
|
if form in meta_desc:
|
||||||
|
keywords_found.append(f'city_in_description:{city_lower}')
|
||||||
|
break
|
||||||
|
|
||||||
return list(set(keywords_found))
|
return list(set(keywords_found))
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block title %}Norda Biznes Partner - Strefa Partnera Stowarzyszenia Norda Biznes{% endblock %}
|
{% block title %}Norda Biznes Partner - Firmy Członkowskie Izby Gospodarczej | Wejherowo{% endblock %}
|
||||||
|
|
||||||
{% block meta_description %}Firmy członkowskie Izby Gospodarczej Norda Biznes z Wejherowa - katalog {{ total_companies }} firm z Kaszub. Networking, współpraca biznesowa, usługi i handel w regionie.{% endblock %}
|
{% block meta_description %}Firmy członkowskie Izby Gospodarczej Norda Biznes z Wejherowa - katalog {{ total_companies }} firm z Kaszub. Networking, współpraca biznesowa, usługi i handel w regionie.{% endblock %}
|
||||||
|
|
||||||
@ -32,6 +32,7 @@
|
|||||||
"latitude": 54.6059,
|
"latitude": 54.6059,
|
||||||
"longitude": 18.2356
|
"longitude": 18.2356
|
||||||
},
|
},
|
||||||
|
"openingHours": "Mo-Fr 08:00-16:00",
|
||||||
"openingHoursSpecification": [
|
"openingHoursSpecification": [
|
||||||
{
|
{
|
||||||
"@type": "OpeningHoursSpecification",
|
"@type": "OpeningHoursSpecification",
|
||||||
@ -533,9 +534,9 @@
|
|||||||
Inteligentne wyszukiwanie firm przez naturalne pytania:
|
Inteligentne wyszukiwanie firm przez naturalne pytania:
|
||||||
</p>
|
</p>
|
||||||
<ul style="color: var(--text-secondary); font-size: var(--font-size-base); line-height: 2; list-style: none; padding: 0;">
|
<ul style="color: var(--text-secondary); font-size: var(--font-size-base); line-height: 2; list-style: none; padding: 0;">
|
||||||
<li style="padding: var(--spacing-xs) 0;">✓ "Kto robi konstrukcje stalowe?"</li>
|
<li style="padding: var(--spacing-xs) 0;">✓ "Szukam serwis Wejherowo"</li>
|
||||||
<li style="padding: var(--spacing-xs) 0;">✓ "Szukam firmy IT z ISO 9001"</li>
|
<li style="padding: var(--spacing-xs) 0;">✓ "Transport Gdynia lub Rumia"</li>
|
||||||
<li style="padding: var(--spacing-xs) 0;">✓ "Potrzebuję prawnika w Wejherowie"</li>
|
<li style="padding: var(--spacing-xs) 0;">✓ "Szkolenia Wejherowo dla firm"</li>
|
||||||
<li style="padding: var(--spacing-xs) 0;">✓ Dostaniesz konkretne firmy z kontaktami</li>
|
<li style="padding: var(--spacing-xs) 0;">✓ Dostaniesz konkretne firmy z kontaktami</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -553,9 +554,9 @@
|
|||||||
Precyzyjne wyszukiwanie według wielu kryteriów:
|
Precyzyjne wyszukiwanie według wielu kryteriów:
|
||||||
</p>
|
</p>
|
||||||
<ul style="color: var(--text-secondary); font-size: var(--font-size-base); line-height: 2; list-style: none; padding: 0;">
|
<ul style="color: var(--text-secondary); font-size: var(--font-size-base); line-height: 2; list-style: none; padding: 0;">
|
||||||
<li style="padding: var(--spacing-xs) 0;">✓ Kategoria działalności</li>
|
<li style="padding: var(--spacing-xs) 0;">✓ Kategoria: sklep, gabinet, studio Wejherowo</li>
|
||||||
<li style="padding: var(--spacing-xs) 0;">✓ Rodzaj usług</li>
|
<li style="padding: var(--spacing-xs) 0;">✓ Usługi: remonty, instalacje, naprawa Reda</li>
|
||||||
<li style="padding: var(--spacing-xs) 0;">✓ Lokalizacja (miasto/powiat)</li>
|
<li style="padding: var(--spacing-xs) 0;">✓ Lokalizacja: Wejherowo, Rumia, Reda, Gdynia</li>
|
||||||
<li style="padding: var(--spacing-xs) 0;">✓ Słowa kluczowe w opisie</li>
|
<li style="padding: var(--spacing-xs) 0;">✓ Słowa kluczowe w opisie</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user