Seobility-Report 2026-11-10: Backend-Befunde umgesetzt
Crawl nach dem Footer-Fix: 1.094 Seiten (vorher 9). Backend-Anteil:
- Migration seo_report_fixes_20261110: Platzhalter-SEO-Titel auf /solutions
geleert; News mit verdoppeltem Titel/Slug und Slugs mit Slash bereinigt
(+Redirects); 8 Tippfehler; zweite Welle toter Alt-Links (datapath.co.uk-
Absolutlinks, utm-Varianten, /resource-center, /services, /contact-sales,
/aetria-use-cases, /video-wall-solutions ...) in 48 News ersetzt + 101
Redirects; Record-Shells /product, /news/article, /success-stories/story
leiten auf ihre Uebersichten; Meta-Description /datasheets; WordPress-
Reste in den 17 SEO-Artikeln entfernt; 53 News-Zeiger-Records (type=1
auf alte /en/news-Seiten, ohne eigenen Text) bekommen den Seiteninhalt
(Text + Bilder) in den Record und werden normale Artikel - die alten
Seiten leiten per 301 auf die Artikel.
- VitecMetaHandler: kurze Seitentitel ohne SEO-Titel erhalten ihren
Bereich als Kontext ('Aligo | AV over IP & KVM | VITEC').
- ProcessedFileReferenceToArray: Alt-Text-Fallback (Referenz-Titel, dann
Dateititel) fuer Content-Block-Bilder.
- UsecaseListJsonRenderer: Testimonial-Baender liefern nur noch Stories
mit Zitat, aktueller Markt zuerst, max. 12 (vorher alle 70 = 226 kB auf
jeder Markt-/Solution-Unterseite, identische Bloecke auf ~90 Seiten).
- NewsJsonRenderer: paginierte Listen-Payloads 15 Min. im hash-Cache
(USER_INT rendert sonst jede Variante neu; 50 langsame URLs im Report).
- robots.txt host-abhaengig: dev bekommt robots-dev.txt mit der dev-Sitemap
(Seobility fand '0 Sitemaps', weil die Sitemap-Zeile auf www zeigte).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
5121eaa000
commit
8a652063c5
7 files changed
+590
-1
No files matched your search
@@ -141,6 +141,20 @@ class VitecMetaHandler extends MetaHandler
|
||||
$image = $this->firstImage('pages', 'media', (int)$page['uid']);
|
||||
}
|
||||
|
||||
// --- short page titles get their section as context -------------------
|
||||
// "Aligo | VITEC" (Seobility: 456 titles "zu kurz") becomes
|
||||
// "Aligo | AV over IP & KVM | VITEC"; only for plain pages without an
|
||||
// editor-set SEO title, never for record detail pages.
|
||||
if ($newsUid === 0 && $productArg === '' && $usecaseUid === 0
|
||||
&& $title !== '' && mb_strlen($title) < 30
|
||||
&& trim((string)($page['seo_title'] ?? '')) === ''
|
||||
) {
|
||||
$parentTitle = $this->parentTitle($pageInfo);
|
||||
if ($parentTitle !== '' && mb_stripos($title, $parentTitle) === false) {
|
||||
$title .= ' | ' . $parentTitle;
|
||||
}
|
||||
}
|
||||
|
||||
// --- uniform brand suffix ---------------------------------------------
|
||||
if ($title !== '' && mb_stripos($title, 'vitec') === false) {
|
||||
$title .= ' | VITEC';
|
||||
@@ -209,6 +223,31 @@ class VitecMetaHandler extends MetaHandler
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigation title of the parent page, or '' when the parent is the site
|
||||
* root, a technical container (user_nav, folders) or missing.
|
||||
*/
|
||||
private function parentTitle($pageInfo): string
|
||||
{
|
||||
if ($pageInfo === null) {
|
||||
return '';
|
||||
}
|
||||
$rootLine = $pageInfo->getRootLine();
|
||||
$parent = $rootLine[1] ?? null;
|
||||
if (!is_array($parent) || count($rootLine) < 3) {
|
||||
// parent is the root page (rootline: current, root) or missing
|
||||
return '';
|
||||
}
|
||||
if (in_array((int)($parent['doktype'] ?? 1), [3, 4, 199, 254, 255], true)) {
|
||||
return '';
|
||||
}
|
||||
$name = trim((string)($parent['nav_title'] ?? '')) ?: trim((string)($parent['title'] ?? ''));
|
||||
if ($name === '' || preg_match('/^user[_ -]?nav$/i', $name) === 1 || str_contains($name, '_')) {
|
||||
return '';
|
||||
}
|
||||
return $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Route arguments of the current request (record detail context).
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user