Professional Angular service for managing HTML <link> elements in the document head. Provides a type-safe API to dynamically add, update, query, and remove link elements for SEO, canonical tags, preloading, and resource hints.
npm install @grandgular/link[//]: # ([](https://www.npmjs.com/package/@grandgular/link))

Angular service for managing HTML elements in the document head. Provides a type-safe API to dynamically add, update, query, and remove link elements.
ā Production Ready - The library has been battle-tested during the beta period and is now stable for production use.
- š ļø Full control over elements
- š§© Supports all standard and custom link attributes
- š Query existing links with CSS selectors
- ā»ļø Smart update system (finds and updates existing links)
- š·ļø Type-safe API with LinkDefinition interface
- ā” Lightweight (~2KB gzipped)
- š
°ļø Angular 16+ compatible
``bash`
npm install @grandgular/link
Import and inject the Link service in your component or service:
`typescript
import { Component, inject } from '@angular/core';
import { Link } from '@grandgular/link';
@Component({
selector: 'app-root',
template: ...`
})
export class AppComponent {
link = inject(Link);
// or
// constructor(private link: Link) {}
}
`typescript`
this.link.addTag({
rel: 'canonical',
href: 'https://example.com/page'
});
`typescript`
this.link.addTags([
{ rel: 'preconnect', href: 'https://api.example.com' },
{ rel: 'stylesheet', href: '/styles.css' }
]);
`typescript`
this.link.updateTag({
rel: 'canonical',
href: 'https://example.com/new-url'
});
`typescript`
const canonical = this.link.getTag('rel="canonical"');
`typescript`
this.link.removeTag('rel="canonical"');
`typescript`
this.link.addTag({
rel: 'preload',
href: '/font.woff2',
as: 'font',
type: 'font/woff2',
crossorigin: 'anonymous'
});
`typescript`
this.link.addTag(
{ rel: 'stylesheet', href: '/theme.css' },
true // force creation even if exists
);
`typescript`
this.link.updateTag(
{ href: 'https://new-cdn.com/style.css' },
'href="https://old-cdn.com/style.css"'
);
Type representing all possible attributes including:
- Standard attributes: rel, href, crossorigin, type, etc.
- Custom attributes via index signature
- Modern attributes: fetchpriority, imagesrcset, referrerpolicy
| Method | Description |
|--------|-------------|
| addTag(tag: LinkDefinition, forceCreation?: boolean) | Adds a new link element or returns existing one if found. When forceCreation is true, always creates new element. |addTags(tags: LinkDefinition[], forceCreation?: boolean)
| | Adds multiple link elements. Returns array of created/existing elements. |getTag(attrSelector: string)
| | Returns first link element matching the attribute selector (e.g. 'rel="canonical"') or null if not found. |getTags(attrSelector: string)
| | Returns all link elements matching the attribute selector as an array (empty array if none found). |updateTag(tag: LinkDefinition, selector?: string)
| | Updates existing link (found by selector or auto-detected from tag) or creates new one if not found. |removeTag(attrSelector: string)
| | Removes link element matching the attribute selector. |removeTagElement(link: HTMLLinkElement)` | Removes specific link element from DOM. |
|
MIT Ā© Grandgular