fix: align PortalSEOAudit model with actual database table schema
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
Model had columns (overall_score, on_page_score, etc.) that didn't exist in the migration. Updated model and templates to match the actual table. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
a8fd4b1b87
commit
9989e6fcb7
@ -74,30 +74,42 @@ def admin_portal_seo_run():
|
|||||||
tech = result.get('technical', {})
|
tech = result.get('technical', {})
|
||||||
on_page = result.get('on_page', {})
|
on_page = result.get('on_page', {})
|
||||||
|
|
||||||
|
sec = result.get('security_headers', {})
|
||||||
|
|
||||||
audit = PortalSEOAudit(
|
audit = PortalSEOAudit(
|
||||||
audited_at=datetime.now(),
|
audited_at=datetime.now(),
|
||||||
url=PORTAL_URL,
|
url=PORTAL_URL,
|
||||||
|
# PageSpeed scores
|
||||||
pagespeed_performance=ps_scores.get('performance'),
|
pagespeed_performance=ps_scores.get('performance'),
|
||||||
pagespeed_seo=ps_scores.get('seo'),
|
pagespeed_seo=ps_scores.get('seo'),
|
||||||
pagespeed_accessibility=ps_scores.get('accessibility'),
|
pagespeed_accessibility=ps_scores.get('accessibility'),
|
||||||
pagespeed_best_practices=ps_scores.get('best_practices'),
|
pagespeed_best_practices=ps_scores.get('best_practices'),
|
||||||
overall_score=result.get('overall_score'),
|
# Core Web Vitals
|
||||||
on_page_score=on_page.get('score'),
|
|
||||||
technical_score=tech.get('score'),
|
|
||||||
local_seo_score=result.get('local_seo', {}).get('score'),
|
|
||||||
lcp_ms=cwv.get('lcp_ms'),
|
lcp_ms=cwv.get('lcp_ms'),
|
||||||
fcp_ms=cwv.get('fcp_ms'),
|
fcp_ms=cwv.get('fcp_ms'),
|
||||||
cls=cwv.get('cls'),
|
cls=cwv.get('cls'),
|
||||||
tbt_ms=cwv.get('tbt_ms'),
|
tbt_ms=cwv.get('tbt_ms'),
|
||||||
|
speed_index_ms=cwv.get('speed_index_ms'),
|
||||||
|
# On-page checks
|
||||||
|
has_meta_title=bool(on_page.get('meta_title')),
|
||||||
|
has_meta_description=bool(on_page.get('meta_description')),
|
||||||
|
has_canonical=tech.get('has_canonical'),
|
||||||
has_robots_txt=tech.get('has_robots_txt'),
|
has_robots_txt=tech.get('has_robots_txt'),
|
||||||
has_sitemap=tech.get('has_sitemap'),
|
has_sitemap=tech.get('has_sitemap'),
|
||||||
has_canonical=tech.get('has_canonical'),
|
|
||||||
has_structured_data=on_page.get('has_structured_data'),
|
has_structured_data=on_page.get('has_structured_data'),
|
||||||
has_og_tags=on_page.get('has_og_tags'),
|
has_og_tags=on_page.get('has_og_tags'),
|
||||||
has_ssl=tech.get('has_ssl'),
|
has_ssl=tech.get('has_ssl'),
|
||||||
is_mobile_friendly=tech.get('is_mobile_friendly'),
|
is_mobile_friendly=tech.get('is_mobile_friendly'),
|
||||||
has_hsts=result.get('security_headers', {}).get('has_hsts'),
|
# Security headers
|
||||||
has_csp=result.get('security_headers', {}).get('has_csp'),
|
has_hsts=sec.get('has_hsts'),
|
||||||
|
has_csp=sec.get('has_csp'),
|
||||||
|
has_x_frame=sec.get('has_x_frame_options'),
|
||||||
|
has_x_content_type=sec.get('has_x_content_type'),
|
||||||
|
# Content metrics
|
||||||
|
page_size_bytes=on_page.get('page_size_bytes'),
|
||||||
|
image_count=on_page.get('total_images'),
|
||||||
|
images_without_alt=on_page.get('images_without_alt'),
|
||||||
|
# Full data
|
||||||
full_results=result,
|
full_results=result,
|
||||||
notes=request.form.get('notes', ''),
|
notes=request.form.get('notes', ''),
|
||||||
created_by=current_user.email
|
created_by=current_user.email
|
||||||
@ -106,7 +118,7 @@ def admin_portal_seo_run():
|
|||||||
db.add(audit)
|
db.add(audit)
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
flash(f'Audyt SEO portalu zakończony. Wynik ogólny: {audit.overall_score or "N/A"}', 'success')
|
flash(f'Audyt SEO portalu zakończony. Performance: {audit.pagespeed_performance or "N/A"}', 'success')
|
||||||
return redirect(url_for('admin.admin_portal_seo'))
|
return redirect(url_for('admin.admin_portal_seo'))
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
20
database.py
20
database.py
@ -5519,22 +5519,19 @@ class PortalSEOAudit(Base):
|
|||||||
pagespeed_accessibility = Column(Integer)
|
pagespeed_accessibility = Column(Integer)
|
||||||
pagespeed_best_practices = Column(Integer)
|
pagespeed_best_practices = Column(Integer)
|
||||||
|
|
||||||
# Overall scores from SEOAuditor
|
|
||||||
overall_score = Column(Integer)
|
|
||||||
on_page_score = Column(Integer)
|
|
||||||
technical_score = Column(Integer)
|
|
||||||
local_seo_score = Column(Integer)
|
|
||||||
|
|
||||||
# Core Web Vitals
|
# Core Web Vitals
|
||||||
lcp_ms = Column(Numeric(10, 2))
|
lcp_ms = Column(Numeric(10, 2))
|
||||||
fcp_ms = Column(Numeric(10, 2))
|
fcp_ms = Column(Numeric(10, 2))
|
||||||
cls = Column(Numeric(6, 4))
|
cls = Column(Numeric(6, 4))
|
||||||
tbt_ms = Column(Numeric(10, 2))
|
tbt_ms = Column(Numeric(10, 2))
|
||||||
|
speed_index_ms = Column(Numeric(10, 2))
|
||||||
|
|
||||||
# Key checks
|
# On-page SEO checks
|
||||||
|
has_meta_title = Column(Boolean)
|
||||||
|
has_meta_description = Column(Boolean)
|
||||||
|
has_canonical = Column(Boolean)
|
||||||
has_robots_txt = Column(Boolean)
|
has_robots_txt = Column(Boolean)
|
||||||
has_sitemap = Column(Boolean)
|
has_sitemap = Column(Boolean)
|
||||||
has_canonical = Column(Boolean)
|
|
||||||
has_structured_data = Column(Boolean)
|
has_structured_data = Column(Boolean)
|
||||||
has_og_tags = Column(Boolean)
|
has_og_tags = Column(Boolean)
|
||||||
has_ssl = Column(Boolean)
|
has_ssl = Column(Boolean)
|
||||||
@ -5543,6 +5540,13 @@ class PortalSEOAudit(Base):
|
|||||||
# Security headers
|
# Security headers
|
||||||
has_hsts = Column(Boolean)
|
has_hsts = Column(Boolean)
|
||||||
has_csp = Column(Boolean)
|
has_csp = Column(Boolean)
|
||||||
|
has_x_frame = Column(Boolean)
|
||||||
|
has_x_content_type = Column(Boolean)
|
||||||
|
|
||||||
|
# Content metrics
|
||||||
|
page_size_bytes = Column(Integer)
|
||||||
|
image_count = Column(Integer)
|
||||||
|
images_without_alt = Column(Integer)
|
||||||
|
|
||||||
# Full audit results from SEOAuditor
|
# Full audit results from SEOAuditor
|
||||||
full_results = Column(JSONB)
|
full_results = Column(JSONB)
|
||||||
|
|||||||
@ -158,8 +158,6 @@
|
|||||||
{{ score_card('SEO', latest.pagespeed_seo, prev.pagespeed_seo if prev else None) }}
|
{{ score_card('SEO', latest.pagespeed_seo, prev.pagespeed_seo if prev else None) }}
|
||||||
{{ score_card('Accessibility', latest.pagespeed_accessibility, prev.pagespeed_accessibility if prev else None) }}
|
{{ score_card('Accessibility', latest.pagespeed_accessibility, prev.pagespeed_accessibility if prev else None) }}
|
||||||
{{ score_card('Best Practices', latest.pagespeed_best_practices, prev.pagespeed_best_practices if prev else None) }}
|
{{ score_card('Best Practices', latest.pagespeed_best_practices, prev.pagespeed_best_practices if prev else None) }}
|
||||||
{{ score_card('On-Page', latest.on_page_score, prev.on_page_score if prev else None) }}
|
|
||||||
{{ score_card('Technical', latest.technical_score, prev.technical_score if prev else None) }}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Key checks -->
|
<!-- Key checks -->
|
||||||
@ -178,15 +176,19 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
|
{{ check_item('Meta Title', latest.has_meta_title) }}
|
||||||
|
{{ check_item('Meta Description', latest.has_meta_description) }}
|
||||||
|
{{ check_item('Canonical URL', latest.has_canonical) }}
|
||||||
{{ check_item('robots.txt', latest.has_robots_txt) }}
|
{{ check_item('robots.txt', latest.has_robots_txt) }}
|
||||||
{{ check_item('sitemap.xml', latest.has_sitemap) }}
|
{{ check_item('sitemap.xml', latest.has_sitemap) }}
|
||||||
{{ check_item('Canonical URL', latest.has_canonical) }}
|
|
||||||
{{ check_item('Structured Data', latest.has_structured_data) }}
|
{{ check_item('Structured Data', latest.has_structured_data) }}
|
||||||
{{ check_item('Open Graph', latest.has_og_tags) }}
|
{{ check_item('Open Graph', latest.has_og_tags) }}
|
||||||
{{ check_item('SSL', latest.has_ssl) }}
|
{{ check_item('SSL', latest.has_ssl) }}
|
||||||
{{ check_item('Mobile Friendly', latest.is_mobile_friendly) }}
|
{{ check_item('Mobile Friendly', latest.is_mobile_friendly) }}
|
||||||
{{ check_item('HSTS', latest.has_hsts) }}
|
{{ check_item('HSTS', latest.has_hsts) }}
|
||||||
{{ check_item('CSP', latest.has_csp) }}
|
{{ check_item('CSP', latest.has_csp) }}
|
||||||
|
{{ check_item('X-Frame-Options', latest.has_x_frame) }}
|
||||||
|
{{ check_item('X-Content-Type', latest.has_x_content_type) }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Core Web Vitals -->
|
<!-- Core Web Vitals -->
|
||||||
@ -241,8 +243,6 @@
|
|||||||
<th>SEO</th>
|
<th>SEO</th>
|
||||||
<th>A11y</th>
|
<th>A11y</th>
|
||||||
<th>BP</th>
|
<th>BP</th>
|
||||||
<th>On-Page</th>
|
|
||||||
<th>Tech</th>
|
|
||||||
<th>Notatka</th>
|
<th>Notatka</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
@ -262,8 +262,6 @@
|
|||||||
{{ score_td(a.pagespeed_seo) }}
|
{{ score_td(a.pagespeed_seo) }}
|
||||||
{{ score_td(a.pagespeed_accessibility) }}
|
{{ score_td(a.pagespeed_accessibility) }}
|
||||||
{{ score_td(a.pagespeed_best_practices) }}
|
{{ score_td(a.pagespeed_best_practices) }}
|
||||||
{{ score_td(a.on_page_score) }}
|
|
||||||
{{ score_td(a.technical_score) }}
|
|
||||||
<td style="max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
|
<td style="max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
|
||||||
{{ a.notes or '' }}
|
{{ a.notes or '' }}
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user