Appearance
SEO Strategy
Search engine optimization plan for MTL Rent — targeting Montreal rental search traffic in both French and English.
Current State Audit
What's Working
| Area | Status | Details |
|---|---|---|
| Bilingual URL routing | OK | /en/listings, /fr/listings with locale prefix always shown |
| Hreflang alternates | OK | Proper alternates.languages in all layout generateMetadata() |
| Neighborhood pages | OK | 76 neighborhoods with descriptions (EN/FR), highlights, walkability/transit scores |
| Blog/wiki system | OK | Articles table with bilingual content, /blog and /wiki routes |
| Robots.txt | OK | Allows all crawlers, points to sitemap |
| Open Graph tags | OK | og:locale set to en_CA / fr_CA per locale |
Critical Gaps
| Gap | Status | Priority |
|---|---|---|
| Done — expanded to 9,000+ URLs (76 neighborhoods × 2 locales + 4,480 listings × 2 locales + articles) | ||
Done — generateMetadata() on listings, neighborhoods, blog, wiki detail pages | ||
Done — JSON-LD on listings (RealEstateListing), neighborhoods (Place), articles (BlogPosting/Article) | ||
| Done — server component wrappers with client component children | ||
| No Google Search Console | Not yet — needs manual setup | P1 |
| No internal linking strategy | Neighborhood pages don't link to filtered listing views and vice versa | P2 |
| No FAQ/featured snippet targeting | Missing FAQ sections on high-value pages | P2 |
Keyword Strategy
Bilingual Keyword Map
Montreal is the 2nd-largest French-speaking city in the world. French search volume is significant and less competitive than English. We must target both languages equally.
Tier 1 — High-Intent Transactional (hardest, highest value)
| EN | FR | Notes |
|---|---|---|
| apartments for rent montreal | appartement à louer montréal | Dominated by Kijiji, Rentals.ca, Zumper |
| condos for rent montreal | condo à louer montréal | |
| houses for rent montreal | maison à louer montréal | |
| montreal rentals | location montréal | Broad |
| studio for rent montreal | studio à louer montréal |
Strategy: Too competitive for a new site. Build authority first, target these in 6-12 months. For now, focus ads here.
Tier 2 — Neighborhood (our biggest opportunity)
| EN | FR | Notes |
|---|---|---|
| apartments for rent plateau montreal | appartement à louer plateau mont-royal | High search volume |
| rent in verdun montreal | louer verdun montréal | |
| griffintown apartments | appartement griffintown | |
| mile end rentals | location mile end | |
| NDG apartments for rent | appartement à louer NDG | |
| rent hochelaga montreal | louer hochelaga montréal | |
| rosemont apartments | appartement rosemont |
Strategy: We already have 76 neighborhood pages with rich content. Add proper metadata, expand sitemap, and these pages can rank within 2-3 months.
Tier 3 — Long-Tail (low competition, high conversion)
| EN | FR | Notes |
|---|---|---|
| pet friendly apartments plateau montreal | appartement animaux acceptés plateau | Feature + location |
| 2 bedroom apartment verdun | 4½ à louer verdun | Bedrooms + location |
| cheap apartments montreal under $1000 | appartement pas cher montréal moins de 1000$ | Price-filtered |
| furnished apartment downtown montreal | appartement meublé centre-ville montréal | |
| apartments near concordia university | appartement près de concordia | |
| 3½ à louer montréal | — | Quebec-specific term (FR only) |
| 4½ à louer plateau | — | Quebec-specific term (FR only) |
Strategy: Create programmatic pages for bedroom × neighborhood combinations. Target Quebec-specific terms like "3½" and "4½" that national platforms miss.
Tier 4 — Informational (traffic + authority building)
| EN | FR | Notes |
|---|---|---|
| average rent montreal 2026 | loyer moyen montréal 2026 | Market reports |
| tenant rights quebec | droits des locataires québec | Evergreen guide |
| july 1st moving day montreal | 1er juillet déménagement montréal | Seasonal spike |
| quebec lease laws | lois bail québec | Evergreen |
| rent increase limits quebec 2026 | augmentation loyer québec 2026 | Annual update |
| how to find apartment montreal | comment trouver appartement montréal | Ultimate guide |
| best neighborhoods montreal renters | meilleurs quartiers montréal locataires | Neighborhood hub |
Strategy: Blog content aligned with content calendar. Drives traffic year-round, with major spikes around July 1st (moving day) and September (student season).
Seasonal Search Patterns
| Period | Trend | Action |
|---|---|---|
| May-June | Peak "apartments for rent" searches (July 1st leases) | Publish moving guides, boost neighborhood content |
| July 1st | Massive spike — Montreal's universal moving day | "Moving day survival guide", social blitz |
| August-September | Student rental season (McGill, Concordia, UdeM, UQAM) | Student-focused content, university partnerships |
| October-February | Low season, fewer searches | Focus on evergreen content, market reports, technical SEO |
| March-April | Searches start climbing again for July leases | Refresh neighborhood pages with new stats |
Programmatic SEO
Our biggest growth lever: we have structured data (76 neighborhoods, 279+ listings) that can generate hundreds of high-quality, indexable pages automatically.
Neighborhood Pages (already built — need optimization)
Current: 76 pages at /en/neighborhoods/{slug} and /fr/neighborhoods/{slug} = 152 URLs.
Each page already has:
- Bilingual description and highlights (populated for all 76)
- Walkability and transit scores
- Per-bedroom price stats (avg, min, max, count)
- Active listings in the neighborhood
- Borough context
Missing (to fix):
generateMetadata()with dynamic title/description from neighborhood data- Inclusion in
sitemap.ts - Schema.org
Placestructured data - FAQ section targeting featured snippets ("What's the average rent in {neighborhood}?")
- Internal links to filtered listings view
Target titles:
- EN: "Apartments for Rent in {Neighborhood} | MTL Rent"
- FR: "Appartements à louer à {Neighborhood} | MTL Rent"
Target descriptions:
- EN: "Find {count} apartments for rent in {Neighborhood}, Montreal. Average rent: ${avg}/mo. Walkability: {score}/100. Browse listings with photos, prices, and neighborhood insights."
- FR: "Trouvez {count} appartements à louer à {Neighborhood}, Montréal. Loyer moyen : {avg}$/mois. Marchabilité : {score}/100. Parcourez les annonces avec photos et prix."
Listing Detail Pages (need metadata)
Current: 279+ pages at /en/listings/{id} and /fr/listings/{id}. Client-rendered, no server-side metadata.
To add:
generateMetadata()with listing title, price, location, bedrooms- Schema.org
RealEstateListing+Apartment/Housestructured data - Inclusion in
sitemap.ts(active listings only) - Canonical URLs
Target title: "{Title} — ${price}/mo in {Neighborhood} | MTL Rent"
Blog/Wiki Articles (need sitemap)
Current: Articles exist in DB with slugs. Routes at /blog/{slug} and /wiki/{slug}.
To add:
- Include in
sitemap.ts - Schema.org
Article/BlogPostingstructured data - Proper
generateMetadata()from article title and excerpt
Future: Bedroom × Neighborhood Pages
Generate pages like:
/en/neighborhoods/plateau/2-bedroom→ "2 Bedroom Apartments in Plateau Mont-Royal"/fr/neighborhoods/verdun/3-bedroom→ "Appartements 3 chambres à Verdun"
This creates 76 neighborhoods × ~4 bedroom counts × 2 locales = ~608 additional indexable URLs targeting high-intent long-tail queries.
Technical SEO Roadmap
Priority 0 — Sitemap Expansion
File: services/web/app/sitemap.ts
Expand from 14 static URLs to include:
- All 76 neighborhoods (fetch slugs from API)
- All active listings (fetch IDs from API)
- All published articles (fetch slugs from API)
Estimated total: 14 static + 152 neighborhoods + 558 listings + articles = 700+ URLs.
Consider splitting into multiple sitemaps (sitemap-index.xml) if listings grow past 1000.
Priority 1 — Dynamic Page Metadata
Add generateMetadata() to:
/neighborhoods/[slug]/page.tsx— title from neighborhood name, description from stats/listings/[id]/page.tsx— title from listing title, price, location/blog/[slug]/page.tsx— title from article title
These pages are currently client-rendered. For metadata to work, they need a server component wrapper or a separate generateMetadata export that fetches data.
Priority 2 — Schema.org Structured Data
Add JSON-LD <script> tags:
Listing pages:
json
{
"@context": "https://schema.org",
"@type": "RealEstateListing",
"name": "Spacious 2BR in Plateau",
"url": "https://mtl-rent.fesenko.net/en/listings/abc",
"datePosted": "2026-01-15",
"offers": {
"@type": "Offer",
"price": "1450",
"priceCurrency": "CAD",
"availability": "https://schema.org/InStock"
},
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Rue Saint-Denis",
"addressLocality": "Montreal",
"addressRegion": "QC",
"postalCode": "H2X 1K8",
"addressCountry": "CA"
}
}Neighborhood pages:
json
{
"@context": "https://schema.org",
"@type": "Place",
"name": "Plateau Mont-Royal, Montreal",
"description": "...",
"geo": { "@type": "GeoCoordinates", "latitude": 45.52, "longitude": -73.58 }
}All pages:
json
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [...]
}Priority 3 — Internal Linking
- Neighborhood pages → link to "Browse all listings in {neighborhood}"
- Listing detail → link to neighborhood profile
- Blog articles → link to relevant neighborhoods and listings
- Homepage → link to top neighborhoods
- Footer → links to all borough/neighborhood hub pages
Priority 4 — Core Web Vitals
- Lazy load listing images below the fold
- Optimize Largest Contentful Paint (LCP) on listing grid pages
- Minimize Cumulative Layout Shift (CLS) from async-loaded data
- Consider ISR (Incremental Static Regeneration) for neighborhood pages
Priority 5 — Google Search Console
- Verify site ownership
- Submit expanded sitemap
- Monitor indexing status
- Track impressions, clicks, CTR by page type
- Set up search performance alerts
Content SEO
Pillar Content Strategy
Each pillar page is a comprehensive guide that targets a high-volume keyword and links to supporting cluster pages.
| Pillar | Target keyword | Cluster pages |
|---|---|---|
| Neighborhood hub | "best neighborhoods montreal renters" | Individual neighborhood profiles (76) |
| Renter's guide | "how to find apartment montreal" | Lease laws, tenant rights, moving guide |
| Market report | "montreal rent prices 2026" | Per-neighborhood price pages, trend charts |
| Landlord guide | "list apartment for rent montreal" | Listing tips, photography, pricing |
Neighborhood Pages as SEO Moat
Our 76 populated neighborhood pages are a competitive moat. National platforms (Kijiji, Zumper) have generic neighborhood data. We have:
- Bilingual descriptions written for local context
- Walkability and transit scores
- Per-bedroom price breakdowns
- Real-time listing counts
- Local highlights (parks, transit, restaurants)
Action items:
- Add FAQ schema to each neighborhood page
- Add "Related neighborhoods" links for internal linking
- Refresh content seasonally with updated stats
- Add user-generated content (reviews, tips) in the future
Blog Content Calendar (SEO-aligned)
Publish 2-4 articles per month, timed to search demand:
| Month | Article (EN) | Article (FR) | Target keyword |
|---|---|---|---|
| March | "Montreal Rent Report Q1 2026" | "Rapport loyers Montréal T1 2026" | montreal rent prices 2026 |
| April | "How to Find an Apartment for July 1st" | "Comment trouver un appartement pour le 1er juillet" | find apartment montreal july |
| May | "Best Neighborhoods for Students" | "Meilleurs quartiers pour étudiants Montréal" | student apartments montreal |
| June | "July 1st Moving Day Survival Guide" | "Guide de survie déménagement 1er juillet" | july 1st moving montreal |
| July | "Montreal Rent Report Q2 2026" | "Rapport loyers Montréal T2 2026" | average rent montreal |
| August | "Moving to Montreal from Abroad" | "S'installer à Montréal de l'étranger" | moving to montreal rental guide |
| September | "Tenant Rights in Quebec" | "Droits des locataires au Québec" | tenant rights quebec |
| October | "Montreal Rent Report Q3 2026" | "Rapport loyers Montréal T3 2026" | montreal rent increase |
| November | "Understanding Quebec Lease Laws" | "Comprendre les lois du bail au Québec" | quebec lease laws |
| December | "Year in Review: Montreal Rental Market" | "Bilan annuel : marché locatif montréalais" | montreal rental market |
Local SEO
Google Business Profile
- Create a Google Business Profile for "MTL Rent" as a technology company / real estate service
- Category: "Real Estate Agency" or "Property Management Company"
- Service area: Greater Montreal
- Link to website, add photos, post updates
Local Citations
Submit to Canadian business directories:
- Yelp Canada
- Yellow Pages Canada (YellowPages.ca)
- Canada411
- Canpages
- Better Business Bureau (BBB) Quebec
- Chambre de commerce du Montréal métropolitain
NAP Consistency
Ensure Name, Address, Phone are identical across all listings:
- Website footer
- Google Business Profile
- All directory listings
- Social media profiles
Link Building
High-Priority Targets
| Source | Approach | Expected difficulty |
|---|---|---|
| McGill Off-Campus Housing | Reach out to student services, offer as resource | Medium |
| Concordia Student Housing | Same approach | Medium |
| UdeM / UQAM student portals | French-language outreach | Medium |
| Immigrant.quebec / newcomer guides | Content partnership | Low |
| Montreal Gazette real estate section | Pitch market reports as expert source | High |
| Journal de Montréal immobilier | Pitch in French | High |
| BlogTO / MTL Blog | Neighborhood guide features | Medium |
| Local real estate blogs | Guest posts, data sharing | Low |
Digital PR
- Publish quarterly rent reports with shareable data visualizations
- Create embeddable widgets (neighborhood price stats) that other sites can use
- Offer data to journalists covering Montreal housing affordability
Community
- Answer questions on Reddit (r/montreal, r/mcgill, r/concordia)
- Participate in Montreal housing Facebook groups (not spam — helpful answers)
- Quora answers about renting in Montreal
Measurement & Goals
Tools
| Tool | Purpose |
|---|---|
| Google Search Console | Impressions, clicks, indexing, page experience |
| Google Analytics 4 | Traffic, user behavior, conversions |
| Ahrefs / SEMrush (future) | Keyword tracking, backlink monitoring, competitor analysis |
KPIs
| Metric | Month 1 | Month 3 | Month 6 | Month 12 |
|---|---|---|---|---|
| Indexed pages | 100+ | 300+ | 500+ | 700+ |
| Organic monthly visits | 50 | 500 | 2,000 | 10,000 |
| Keywords in top 100 | 20 | 100 | 300 | 500 |
| Keywords in top 10 | 0 | 5 | 20 | 50 |
| Referring domains | 2 | 10 | 25 | 50 |
| Organic click-through rate | — | 2% | 3% | 4% |
Reporting
- Weekly: Check Search Console for indexing issues, new impressions
- Monthly: Keyword ranking report, organic traffic trend, top landing pages
- Quarterly: Full SEO audit, content performance review, strategy adjustment