Executive summary
A 4-page brochure site for a Makati brokerage that sells, leases and advises on property.
Listings send visitors away. No property has its own page. "View Property Details" opens the Instagram post, where logged-out visitors hit a login wall. Price, size and bedrooms appear on Instagram but nowhere on the site.
Search engines see almost nothing. Pages render in the browser with JavaScript. The HTML the server sends has about 42 characters of text and no headline. There's no sitemap and no structured data, three pages share one description, and Google has indexed only 4 URLs.
The Cloudflare bot challenge is too strict. Google's own PageSpeed tool received a 403 error and reported the page as "blocked from indexing". Link previews and SEO tools are likely blocked too.
Trust and compliance gaps. There are 3 emails, 2 mobile numbers and 2 office addresses across the site, photos and property portals. The site shows no PRC licence, legal company name or privacy policy, and the contact email is a Gmail address.
Scorecard
How each area rates, based on what could be verified.
Performance
Needs workHomepage is about 15 MB across 138 requests, 12.6 MB of it images, with nothing lazy-loaded. PageSpeed couldn't test the real page.
SEO
PoorContent renders in the browser, no sitemap, no schema, shared descriptions, and no listing pages that could rank.
Security
Good (basics)HTTPS, HSTS, Turnstile and core headers are in place. Minor leak of auth scaffolding.
UX and conversion
PoorThe listing CTA leaves the site for an Instagram login wall. No prices, filters or per-property enquiry.
Content and trust
Needs workConflicting contact details, a Gmail address, no licence or legal name, and About copy that reads like an internal brief.
Accessibility
Needs workPartial check: 10 homepage images lack alt text, and the details button only appears after a click or hover.
Tech stack
What the site is built on, and the evidence for each finding.
| Item | Finding | Evidence | Concern |
|---|---|---|---|
| Back end | Laravel (PHP) with the Jetstream auth starter kit | Page data includes jetstream and auth props; /up health route; /login and /register redirect | Starter-kit props (admin role names, canRegister) exposed on every public page |
| Front end | Vue 3 through Inertia.js, rendered in the browser | data-page root, __vue_app__, page components Home / About / Listing / Contact | No server-side rendering, so crawlers get an empty shell |
| Build | Vite | Hashed files under /build/assets/ | Fine |
| CSS | Tailwind CSS | Utility classes on body and components | Fine |
| Fonts | Google Fonts and Bunny Fonts, plus 3 self-hosted Font Awesome files | Network requests | Two font providers (Bunny is likely the Laravel default left in), and three icon fonts for a few icons |
| Hosting / CDN | Cloudflare proxy, bot challenge, Web Analytics, managed robots.txt | server: cloudflare, cf-ray, /cdn-cgi/rum | Challenge blocks legitimate tools; HTML isn't cached (cf-cache-status: DYNAMIC) |
| Listing data | Instagram posts. Images load from Instagram's CDN and detail links go to instagram.com | Image hosts and link targets | The site holds no listing data of its own |
| Analytics | Google Tag Manager and Cloudflare Web Analytics | gtm.js, dataLayer | Unconfirmed which tags fire, and whether Viber, WhatsApp and call clicks are tracked |
| Forms | Custom contact form with Cloudflare Turnstile | Hidden cf-turnstile-response field | Good spam protection; no phone field and no privacy consent |
| Security headers | HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy | Response headers | No Content-Security-Policy or Permissions-Policy |
| Developer | Technomancer | "Powered by" footer link | Built by an agency |
Findings
Grouped by area, highest impact first. Effort: S = hours to a day, M = days, L = a week or more.
1. Listings and conversion
| Issue | Why it matters | Fix | Effort |
|---|---|---|---|
| No property detail pages. "View Property Details" opens Instagram in the same tab | Visitors leave, often hit Instagram's login wall, and rarely come back | Build /listing/{slug} pages: gallery, price, type, beds/baths, floor area, parking, map, property ID, enquiry form | M–L |
| Cards show no price, size, bedrooms or Sale/Lease status in text | Buyers filter by budget and size first. Instagram has this data (e.g. Kroma Tower: 1BR, 60 sqm, ₱13.8M) but the site hides it | Show price, type, beds and sqm on each card | S |
| Only a free-text search, no filters | Hard to browse more than a few listings | Filters for Sale/Lease, location, type, price range, bedrooms | M |
| The details button only appears after clicking a card, and cards aren't links | Hidden CTA, poor on touch devices, not crawlable | Make the whole card a real link to its detail page | S |
| Card location repeats the title ("Kroma Tower / Kroma Tower") | Wasted space, looks unfinished | Show city or area (Makati, BGC Taguig) | S |
| Viber and WhatsApp links don't say which property | Agents have to ask "which unit?" every time | Prefill messages and forms with the property ID | S |
| No testimonials, closed deals, partner developers or named banks | High-end buyers need proof before reaching out | Add a proof section: deals closed, reviews, bank partners, press | S–M |
2. SEO
| Issue | Why it matters | Fix | Effort |
|---|---|---|---|
| Server HTML has no visible text and no H1 | Google has to run JavaScript to see anything. Other crawlers, AI tools and link previews see a blank page | Turn on Inertia SSR (supported natively by Laravel and Vue) | M |
| About, Listings and Contact share one meta description and one server-side title | Weak, duplicate snippets. Google shows Contact as just "Transcend Realty & Consultancy" | Unique title and description per page, rendered on the server | S |
| No sitemap.xml | Slower discovery of new listings | Generate a sitemap with every listing and submit it in Search Console | S |
| No canonical tags | Duplicate URL risk | Self-referencing canonicals | S |
| No structured data | No rich results, weaker local signals | RealEstateAgent schema site-wide, listing schema per property | S–M |
| Only 4 URLs indexed, none per property | No chance of ranking for "condo for sale Makati" and similar searches | Comes with the listing pages above | M |
| robots.txt blocks GPTBot, ClaudeBot, Google-Extended and other AI crawlers | The firm won't show up when buyers ask AI assistants for brokers | Block AI training if they want, but allow AI search bots | S |
| No Twitter/X card tags; generic logo as OG image | Weak previews when shared on Viber, Messenger and Facebook | Card tags and a per-listing OG image | S |
3. Performance
| Issue | Why it matters | Fix | Effort |
|---|---|---|---|
| Homepage about 15 MB, 138 requests, 107 images (12.6 MB), single images up to ~290 KB | Slow on mobile data, hurts Core Web Vitals | Lazy-load below the fold, cap carousel slides, serve resized WebP/AVIF from the site | M |
| 105 of 107 images have no width or height | Layout shift while images load | Explicit dimensions or aspect-ratio | S |
| Two font services plus 3 Font Awesome files | Extra requests, slower first render | Self-host the 2 fonts used; inline SVG icons | S |
| HTML isn't cached; server response about 640 ms | Every visit waits on the origin | Cache guest HTML at Cloudflare or tune the origin | M |
| PageSpeed Insights received the Cloudflare challenge (HTTP 403) | No real baseline to report | Allow-list Lighthouse, then re-run | S |
4. Content and trust
| Issue | Why it matters | Fix | Effort |
|---|---|---|---|
| Contact details conflict across the site, Instagram, hero photo watermarks and Dot Property (3 emails, 2 mobiles, 2 addresses) | Confuses buyers and weakens local SEO | One set of details everywhere, including portals and watermarks | S |
| Gmail address for a brokerage at Ayala Tower One | Looks less established; replies can land in spam | Use an @trc.com.ph mailbox | S |
| No PRC licence number or legal name ("Transcend Realty and Consultancy, OPC") on the site | Credibility. RESA (RA 9646) also requires licence details on property ads, so the client should confirm compliance | Licence and legal name in the footer and on listing pages | S |
| About copy reads like an internal brief ("Transcend Realty highlights how its owner established…") | Sounds unedited on the page that should build trust most | Rewrite in first person; add founder photo, credentials, team, track record | S |
| No privacy policy; no consent on the contact form | The Data Privacy Act (RA 10173) requires it | Privacy policy page and a consent line on forms | S |
5. UX and design
| Issue | Why it matters | Fix | Effort |
|---|---|---|---|
| "Explore Listings" overlaps the "SELL • INVEST • RENT" text in the hero | Visible bug above the fold | Fix spacing and positioning | S |
| Header CTAs are only Viber and WhatsApp icons | High-value clients often prefer to call; icons are easy to miss | A labeled "Book a consultation" button and a click-to-call number | S |
| Mobile layout not reviewed in this pass | Most local property traffic is mobile | Review on a 390px viewport | S |
6. Security and technical hygiene
| Issue | Why it matters | Fix | Effort |
|---|---|---|---|
Public pages send Jetstream data including role names (admin, super_admin) and canRegister | Minor information leak about the admin setup | Share auth props only with logged-in users; confirm registration is off | S |
| No Content-Security-Policy or Permissions-Policy | Missing defense in depth | Add both headers | S |
| Listings depend on the Instagram feed (mechanism unconfirmed) | If the token or API breaks, the listings page could go empty | Store listings in the site's own database | M |
Roadmap
What to do, in order.
Under a week
Quick wins
- Unify contact details; switch to a domain email.
- Fix the hero overlap; add a labeled call or consultation CTA.
- Add PRC licence, legal name, privacy policy and form consent.
- Unique titles and descriptions, canonicals, sitemap,
RealEstateAgentschema; submit to Search Console. - Loosen the Cloudflare challenge, then re-run PageSpeed.
- Lazy-load images, set dimensions, drop the extra font provider.
- GA4 conversion events for Viber, WhatsApp, call and form.
- Rewrite the About page opening.
1 to 4 weeks
Medium
- Listing management in the existing Laravel admin (Filament is a quick add).
- Property detail pages with enquiry forms, prefilled messaging and listing schema.
- Filters for Sale/Lease, location, type, price and bedrooms.
- Turn on Inertia SSR so every page is crawlable.
- Image pipeline: resize and serve WebP/AVIF from the site.
- Proof section, and a claimed, consistent Google Business Profile.
Strategic: upgrade, don't rebuild
The stack (Laravel, Vue, Inertia, Tailwind, Cloudflare) is modern and fits the job. The real gap is the content model: the site owns no listing data, so it can't rank, convert or track leads.
The recommended move is a listings engine and SEO upgrade. Listings are managed on the site and shared to Instagram from there, and every property page works as a landing page.
Method and limits
How this was checked, and what wasn't.
- Reviewed on 3 November 2026 in a real Chrome session after Cloudflare's challenge cleared: Home, About, Listings, Contact, a listing CTA, robots.txt and sitemap paths, response headers, and Google
site:and brand searches. - PageSpeed Insights scored the Cloudflare challenge page (HTTP 403), not the real site, so those scores are left out.
- Not verified: mobile layout, which tags GTM fires, how the Instagram feed is pulled in, keyboard and contrast accessibility, and whether a Google Business Profile exists.
- Performance figures come from one desktop page load. Treat them as indicative.