DEV Community

Cover image for Mastering SEO with Angular V18
aswinth
aswinth

Posted on

Mastering SEO with Angular V18

Introduction

Search Engine Optimization (SEO) is crucial for the success of any website. While Angular is a powerful framework for building dynamic single-page applications, it presents unique challenges for SEO due to its reliance on JavaScript for rendering content. In this guide, we’ll explore best practices for optimizing an Angular application for search engines, including how to implement meta tags for different pages dynamically.

1. Understanding the SEO Challenges in Angular

Angular applications often face SEO challenges because search engine crawlers historically have had difficulty executing JavaScript. This can lead to issues with indexing and ranking content properly.

Key Challenges:

  • Client-Side Rendering: Angular applications render content on the client side, which can be problematic for search engine crawlers.

  • Dynamic Content: Content that is dynamically loaded can be missed by crawlers.

2. Server-Side Rendering with @angular/ssr

One of the most effective ways to improve SEO in Angular applications is by using @angular/ssr official package, which allows for server-side rendering (SSR). SSR generates static HTML content on the server, making it easier for search engines to index.

Benefits of SSR:

  • Improved SEO: Server-side rendering ensures that crawlers can see the content.

  • Faster First Paint: Users see content faster because HTML is pre-rendered.

Setting Up @angular/ssr

  1. settings up @angular/ssr Package:
ng add @angular/ssr
Enter fullscreen mode Exit fullscreen mode

These commands create and update application code to enable SSR and adds extra files to the project structure.

2.Update app.config.ts to enable support for hydrating i18n blocks:

export const appConfig: ApplicationConfig = {
  providers: [ provideClientHydration(withI18nSupport())]
};
Enter fullscreen mode Exit fullscreen mode

To enable hydration for i18n blocks, you can add withI18nSupport to your provideClientHydration call.

During rendering, constructor and initial life cycle hooks, excluding afterRender and afterNextRender, will execute both on the server and in the browser. Loading components’ ngOnChanges, ngOnInit, and ngDoCheck will be rendered on both the server and the browser, while other event handlers will run exclusively on the browser.

3. Dynamic Meta Tags in Angular

Meta tags are essential for SEO, providing search engines with information about the content of your pages. In Angular, you can use the Meta service from @angular/platform-browser to dynamically update meta tags.

Adding Meta Tags to the Root Component:

First, import the Meta and Title services in your root component (e.g., app.component.ts):

import { Meta, Title } from '@angular/platform-browser';
Enter fullscreen mode Exit fullscreen mode
 export class AppComponent {

  constructor(private meta: Meta, private titleService: Title) { }

  updateMetaTags() {
    this.titleService.setTitle('Your Angular App - Home');

    // Standard Meta Tags
    this.meta.addTag({ name: 'description', content: 'Welcome to the home page of your Angular app.' });
    this.meta.addTag({ name: 'keywords', content: 'Angular, SEO, JavaScript' });

    // Open Graph Meta Tags
    this.meta.addTag({ property: 'og:title', content: 'Your Angular App - Home' });
    this.meta.addTag({ property: 'og:description', content: 'Welcome to the home page of your Angular app.' });
    this.meta.addTag({ property: 'og:image', content: 'path/to/your/image.png' });
  }
}
Enter fullscreen mode Exit fullscreen mode

Meta Tag Key Differences:

  1. Attribute Used:
  • Standard Meta Tags use the name attribute.

  • Open Graph Meta Tags use the property attribute.

2.Intended Audience:

  • Standard Meta Tags are for search engines and web browsers.

  • Open Graph Meta Tags are for social media platforms to enhance sharing.

Call updateMetaTags() from your component’s ngOnInit method or wherever appropriate:


ngOnInit() {
  this.updateMetaTags();
}
Enter fullscreen mode Exit fullscreen mode

4. Page-Wise Meta Tag Updates

For a better SEO strategy, each page should have its own unique meta tags. This can be achieved by updating the meta tags within each component corresponding to different routes.

Example: Updating Meta Tags in a Component:
Suppose you have an About page. Update its component (e.g., about.component.ts) to set specific meta tags:

export class AboutComponent implements OnInit {

  constructor(private meta: Meta, private titleService: Title) { }

  ngOnInit(): void {
    this.titleService.setTitle('About Us - Your Angular App');
    this.meta.updateTag({ name: 'description', content: 'Learn more about us at Your Angular App.' });
    this.meta.updateTag({ name: 'keywords', content: 'Angular, About Us, Company' });
    this.meta.updateTag({ property: 'og:title', content: 'About Us - Your Angular App' });
    this.meta.updateTag({ property: 'og:description', content: 'Learn more about us at Your Angular App.' });
    this.meta.updateTag({ property: 'og:image', content: 'path/to/about-image.png' });
  }
}
Enter fullscreen mode Exit fullscreen mode

5. Implementing Lazy Loading for Faster Load Times

Lazy loading modules can significantly improve your application’s performance, making it faster and more responsive, which indirectly benefits SEO by improving user experience metrics.

Configuring Lazy Loading:
Update your app.routes.ts to use lazy loading:

export const routes: Routes = [
    {path: '', loadComponent: () => import('../app/home/home.component').then(c=>c.HomeComponent)},
    {path: 'about', loadComponent: () => import('../app/about/about.component').then(c=>c.AboutComponent)}
];
Enter fullscreen mode Exit fullscreen mode

6. Structured Data for Rich Snippets

Structured data helps search engines understand your content better and can result in rich snippets, which are enhanced listings in search results.

Adding Structured Data with JSON-LD:
Include structured data in your component using JSON-LD. For example, in about.component.ts:

export class AboutComponent {

  private renderer = inject(Renderer2)
  private rendererFactory = inject(RendererFactory2)

  ngOnInit(): void {
    this.renderer = this.rendererFactory.createRenderer(null, null);
    this.addStructuredData();
  }

  addStructuredData() {
    const script = this.renderer.createElement('script');
    script.type = 'application/ld+json';
    script.text = `
    {
      "@context": "http://schema.org",
      "@type": "Organization",
      "name": "Your Angular App",
      "url": "https://your-angular-app.com",
      "logo": "https://your-angular-app.com/logo.png",
      "description": "Learn more about us at Your Angular App."
    }`;
    this.renderer.appendChild(document.head, script);
  }
}
Enter fullscreen mode Exit fullscreen mode

Conclusion

Optimizing an Angular application for SEO requires a combination of server-side rendering, dynamic meta tag management, and structured data implementation. By following these practices, you can ensure that your Angular app is more discoverable and ranks higher in search engine results, providing a better experience for users and driving more traffic to your site.

Top comments (3)

Collapse
 
draylegend profile image
Vladimir Drayling

thank you for the article, very helpful!

Where can I find a full list of all necessary meta tags, including messangers?

Collapse
 
aswinthgt profile image
aswinth

You can find all meta tags in the GitHub repository. The link is: gist.github.com/whitingx/3840905

Collapse
 
ruswen_nzuritajimnez_ profile image
Ruswen N. Zurita Jiménez

Good article. I have a question What is the relationship between the schema.org structure and sitemap XML with you explain in this article about SEO?