Professional Roofing Services in Los Angeles & Orange County
Custom WordPress plugins, SEO automation, and blog infrastructure for golemroofing.com
- Canonical NAP:
4126 E Ransom St, Long Beach, CA 90804,(562) 991-8165. - Current facts:
8 yearsexperience,12-year No-Leakworkmanship warranty, exact200 Reviews. - Ahrefs 404 cleanup shipped in commit
784676c. - Contact page redesign shipped in commit
039925a. /contact/is a designed live page with roofing image hero, direct contact panel, and inline quote form.- Contact form posts through WordPress
admin-post.phpand sends viawp_mail()toGolemroofing@gmail.com. - Domain mail is live:
info@golemroofing.commailbox, Roundcube webmail, Cloudflare MX/SPF/DKIM/DMARC, and Hestia/Exim/Dovecot service stack. - Latest client visual pass removed the cloned Smart Asset service card, fixed Smart Asset/reasons icons, restored Google label to
5 star, removed visible HomeAdvisor footer link, added original-style Thumbtack icon, and aligned mobile service rows. - Latest targeted home smoke:
npx playwright test tests/live-smoke.spec.js -g "home: schema NAP and trust row are consistent" --reporter=line->2 passed. - Latest visual QA:
node scripts\qa-client-visual-fixes.js->failedCount: 0. - GitHub Actions scheduled smoke is disabled while the GitHub account is billing-locked; use local Playwright and server monitor.
golemroofing.com/
├── .github/workflows/ # CI/CD automation
│ └── deploy.yml # Auto-deploy on push to main
├── wp-content/
│ └── mu-plugins/ # Must-Use plugins (auto-loaded by WP)
│ ├── golem-geo-engine.php # 🆕 GEO engine: llms.txt, Schema.org, robots.txt AI rules
│ ├── golem-schema.php # Schema.org (LEGACY — hooks деактивированы geo-engine)
│ ├── golem-blog-seo.php # Blog SEO: Article Schema, FAQ, BreadcrumbList, LCP preload
│ ├── golem-ahrefs-seo-fixes.php # Ahrefs 404 fixes, contact page/form, duplicate meta cleanup
│ ├── golem-swiper-gallery.php # Swiper.js gallery + video Reel player v2.3
│ ├── golem-blog-fixes.php # Blog thumbnails, author/date hiding, image fixes v5.1
│ ├── golem-blog-styles.php # Blog post content styling v2.0
│ └── auto-alt-tags.php # SEO image ALT generator v2.0
├── snippets/ # Code Snippets (stored in DB, backup copy here)
│ └── elementor-telegram.php # Elementor Forms → Telegram notifications
├── robots.txt # Search engine directives + AI crawler rules
└── README.md
Instagram-style image gallery & video Reel player:
- Swiper.js v11 CDN-based carousel with touch, keyboard, autoplay
- Video Reel mode:
[golem_gallery video="url" images="poster"]renders playable mp4 - WebP auto-serving:
golem_gallery_webp_url()serves .webp versions when available - Dynamic alt tags: "Post Title — photo N of M" format for SEO
- Single-image handling (no arrows/pagination for 1 image)
- Instagram-style navigation (circular buttons, dot pagination, dynamic bullets)
- Play overlay with blur backdrop, Reel badge
- Responsive: mobile touch targets, hidden arrows on small screens
Blog listing & thumbnail display fixes:
- Author hiding across all theme locations (CSS + filters)
- Date & category hiding from frontend (
.entry-date, Elementor date widgets, "Uncategorized") - Dates preserved in HTML
<time>tags and Schema.org for SEO crawlers - Thumbnail injection: fills empty
aux-media-framewith featured images - Portrait aspect ratio (4:5) for blog listing cards
- Replaces cropped URLs with originals (instagram/ and uploads/ folders)
- Strips srcset to force original portrait images
- Disables Phlox lazy-loading for reliable thumbnail display
Professional blog post content styling:
.instagram-postwrapper with Roboto font, 800px max-width- Lead paragraphs, section headings (H2/H3) with blue accent
- Material cards, pros/cons grids, stats rows
- CTA boxes with site-matching button style
- Tips boxes, best-for badges
- Full responsive breakpoints
Blog post SEO automation:
- Article Schema with author, datePublished, dateModified, ImageObject
- FAQ Schema auto-generated from post content FAQ sections
- BreadcrumbList on all blog posts
- LCP preload — featured image preloaded via
<link rel="preload"> - ImageObject Schema for featured images
- Cross-links — related posts section for internal linking
Ahrefs crawl cleanup and contact page:
- Publishes/creates
/contact/,/metal-roofing/,/roof-leak-repair/,/shingle-roofing/ - 301 redirects stale URLs to relevant live pages
- Rebuilds
/contact/as a proper page with hero image, contact panel, and inline quote form - Sends contact form through WordPress
wp_mail()toGolemroofing@gmail.com - Suppresses duplicate Auxin meta descriptions so Yoast remains canonical
- Adds fallback Yoast meta descriptions for high-priority pages
GEO (Generative Engine Optimization) — оптимизация сайта для AI-поисковиков:
llms.txt — файлы для AI-краулеров:
/llms.txt— краткая версия (~50 строк): компания, услуги, города, контакты/llms-full.txt— полная версия (~200 строк): описания услуг, районы, FAQ- AI-боты (ChatGPT, Perplexity, Claude) проверяют этот файл как первый источник информации
Schema.org — расширенная разметка:
- Главная: RoofingContractor + 8 городов с GPS-координатами + 15 услуг + 12 FAQ
- Блог-посты: Article schema (author, datePublished, dateModified) — автоматически на все 56+ постов
- Городские страницы: LocalBusiness + город-специфичные GeoCoordinates (активируется по slug)
- Сервисные страницы: Service schema + areaServed (активируется по slug)
- Все страницы: BreadcrumbList (хлебные крошки)
- Автоматически деактивирует старые hooks из golem-schema.php
robots.txt — правила для AI-ботов:
- WordPress filter добавляет Allow для GPTBot, ClaudeBot, PerplexityBot, Google-Extended, ChatGPT-User, Applebot
- (Основной robots.txt — статический файл, фильтр работает как fallback)
Конфигурация сервисных зон (8 городов):
- Seal Beach (90740), Long Beach (90803/90808/90807), Los Alamitos/Rossmoor (90720)
- Manhattan Beach (90266), Hermosa Beach (90254), Redondo Beach (90277/90278)
- Palos Verdes Estates/Rolling Hills Estates (90274), Rancho Palos Verdes (90275)
Целевые услуги (15):
- Installation: Roof / Flat / Tile / Shingle
- Replacement: Roof / Flat / Tile / Shingle / Clay Tile / Concrete Tile
- Repair: Roof / Flat / Tile / Shingle
- Special: Silicone Roof Restoration
Schema.org structured data (JSON-LD) — hooks деактивированы golem-geo-engine.php:
- Файл остаётся как backup, но его функции
golem_roofing_schema_markupиgolem_roofing_faq_schemaотключены - Вся Schema теперь генерируется через golem-geo-engine.php
Contextual ALT text for images:
- Generates ALT from parent post title (e.g., "Roof Replacement in Carson — photo")
- Falls back to readable filename → generic branding
- Adds "— Golem Roofing" suffix for consistency
- Auto-hooks new uploads via
add_attachmentaction
Elementor form submissions → Telegram:
- Sends to 2 recipients: Андрей (705412224) + Dmitry (576534060)
- Stored in DB via Code Snippets plugin (backup copy in
/snippets/)
| Asset | Path | Details |
|---|---|---|
| Video Reels (15 mp4) | /wp-content/uploads/videos/ |
~82 MB total, self-hosted |
| Gallery images (226 WebP) | /wp-content/uploads/gallery/ |
Hi-res originals |
| Instagram images | /wp-content/uploads/instagram/ |
Imported from IG |
| Blog posts | WordPress DB | 56 published posts |
| Metric | Before | After |
|---|---|---|
| TTFB | 0.79s | 0.032s |
| WebP images | 0 | 3,811 |
| Image alt tags | 21% contextual | 100% contextual |
| Schema blocks | 1 per page | 3-6 per page |
| LCP preload | No | Yes |
| Cache | None | WP Super Cache |
| Property | Value |
|---|---|
| URL | https://golemroofing.com |
| Server | 5.78.65.51 (Hetzner) |
| Panel | HestiaCP |
| WordPress | 6.9 |
| Theme | Phlox Pro 5.17.6 |
| Builder | Elementor Pro 3.24.4 |
| SSH | root@5.78.65.51 |
| WP Path | /home/admin/web/golemroofing.com/public_html/ |
| Deploy | GitHub Actions → SSH rsync on push to main |
- Fixed Ahrefs critical 404 targets with pages or relevant 301 redirects.
- Added
golem-ahrefs-seo-fixes.php. - Rebuilt
/contact/from SEO stub into a designed contact/quote page. - Added inline form sending to
Golemroofing@gmail.comthrough WordPress mail. - Suppressed duplicate Auxin meta descriptions; Yoast remains canonical.
- Expanded live smoke tests to check Ahrefs URLs, duplicate meta, contact page design/form, and mobile/desktop sanity.
- Latest verification:
16 passedlive Playwright smoke.
- ⚡ Performance Optimization:
- All images converted to WebP (3,811 WebP files)
- WP Super Cache installed — TTFB: 0.79s → 0.032s (25x improvement)
- LCP preload on blog posts and homepage
- ImageObject Schema in structured data
- 🔍 Blog SEO — golem-blog-seo.php v2.0:
- Article Schema, FAQ Schema, BreadcrumbList on all 56 blog posts
- Cross-links for internal linking
- LCP preload for featured images
- 🖼️ Image SEO — auto-alt-tags.php v2.0:
- All 397 images now have contextual alt tags based on parent post title
- Gallery images: "Post Title — photo N of M" format
- 📅 Date/Category Hiding — golem-blog-fixes.php v5.1:
- Dates and "Uncategorized" hidden from frontend via CSS
- Dates preserved in HTML/Schema for SEO crawlers
- 🖼️ Gallery — golem-swiper-gallery.php v2.3:
- WebP auto-serving via
golem_gallery_webp_url() - Dynamic contextual alt tags
- WebP auto-serving via
- � GEO Engine v1.0 — golem-geo-engine.php:
/llms.txtи/llms-full.txt— файлы для AI-краулеров (ChatGPT, Perplexity, Claude)- Schema.org расширена: 8 городов с GPS, 15 услуг, 12 FAQ, Article на всех постах, BreadcrumbList
- robots.txt: убрана блокировка
/wp-json/, добавлены Allow для GPTBot, ClaudeBot, PerplexityBot, Google-Extended, ChatGPT-User, Applebot - Старый golem-schema.php деактивирован автоматически
- �🔄 Sync verification: server, GitHub, and local repo confirmed identical
- 📝 README updated with full project documentation
- 🎬 Video Reel support: 15 Instagram Reels now play in blog posts (self-hosted mp4)
- 🔌 golem-swiper-gallery.php upgraded to v2.2.0 (video mode, play overlay, Reel badge)
- 📝 Created post #1281 "Real Roof Protection — Warranties, Insurance, and Bond Guarantee"
- 🖼️ ffmpeg frame extraction for video cover images
- 🐛 Fixed missing thumbnail on blog listing for post #1281
- 🖼️ Hi-res gallery images: 226 WebP originals uploaded to
/uploads/gallery/ - 🔄 Swiper.js v11 carousel with Instagram-style navigation
- 📱 Responsive blog listing with portrait 4:5 thumbnails
- ✍️ Blog content styling v2.0 (material cards, pros/cons, CTA blocks)
- 👤 Author display hidden across all theme locations
- ✅ Telegram: added second recipient (576534060, Dmitry)
- ✅ Elementor form submission debugging and fix
- ✅ Code Snippets documentation in repository
- 🔧 Fixed critical WP Telegram error (JSON format in DB)
- ✅ Initial repository setup
- ✅ Schema.org markup (LocalBusiness, RoofingContractor, FAQ)
- ✅ Auto ALT tag generator for images
- ✅ SEO robots.txt configuration
- ✅ GitHub Actions auto-deploy pipeline
Private repository. All rights reserved.
Golem Roofing
Los Angeles & Orange County
☎️ (562) 991-8165