Automatic/inline update of links to headers and blocks when they are modified (no extra dialog window)

I have it from the horse’s mouth (Licat’s) directly:

Preserve links after renaming headings has already been implemented - you just have to trigger the rename using the right click menu on the heading. Blocks don’t get renamed often so we haven’t prioritized it.

My reply:

The right click trigger is not workable in practice. You have to remember to do it. It should be an automatic thing, like the automatic adjustment of links when file names are changed.

Licat’s explanation:

Unfortunately, monitoring heading changes automatically is impractical from a performance perspective. Automatic rename would mean that the program has to constantly monitor what you’re typing in the document.
Constantly checking if you’re editing a heading or not a heading, whether that heading has references to it. It also doesn’t know when your rename is finished.

So, that means this feature request will never be implemented natively in Obsidian. @WhiteNoise can therefore close this topic.

1 Like

This is something that more realistically can be implemented


Huh, I vaguely thought that links and headings were indexed, and so could be updated at least when the page saves. Also, “Preserve links after renaming headings and blocks” is on the short-term roadmap (as pointed out by @I-d-as), so I’m not sure what that means.

I would never have thought to use a context menu to rename headings. I’ll try to remember to do it, but I don’t expect much success.

1 Like

It means a rename block (similar to rename header) will be added. I understand it is confusing and will be renamed.

1 Like

@CawlinTeffid Sorry to mislead you. All this time, I had been thinking, in the works, was a feature that immediately automatically updated links to a heading when it was edited. I hadn’t seen this thread obviously. The problem I have with the context menu is forgetting to use it or accidentally editing headings. Still processing this. Oh well. Better to know than not.

It’s not your fault, I do think the trello card was poorly worded (for brevity).
Check out Block-reference-count plugin, it’s a good solution for knowing when to use the rename functionality and maybe some of that will be implemented in core.


Thanks. Feeling better already.

1 Like

The Block-reference-count plug-in has the problem Licat referred to when he answered me about the automatic updating of links to headers: it slows down Obsidian. I used the plug-in, and noticed that when you type there is a distinct, irritating lag before the text is rendered.

The dev went through several iterations to improve it, which he did, but a lag remained nevertheless, so I gave up on that plug-in.

I know you saw me make this comment in Discord, but I just repeat it here for others.

1 Like

@CawlinTeffid the context menu to adjust links to headers is useful if you just change one header name.

I use the Number headings plug-in, which adds a number to all of the headers and subheaders in a note. If you then add or delete only 1 header, the plug-in adjusts all the header numbers on that page, bypassing the context menu.

1 Like

The problem for me isn’t how many headings I want to change, it’s that headings are part of the text, and I change text by selecting and typing, not by right-clicking. When I inevitably click a broken block/heading link, I suppose I’ll be able to find the text and update the link without too much work, it’ll just be an annoyance. (Just clarifying, not expecting any action.)


@CawlinTeffid I agree with that, and that is what I told Licat in the Discord discussion yesterday. I have used the right-click option once, even though there have been instances where I should. I just forget to do so, probably because, as you indicate, it is unnatural.

I have found a workaround that I will be using from now on since Licat has formally stated the automatic update of links to headers will not be implemented.

I have a vault with many long notes in which there are headers and subheaders. I need the Number heading plug-in to help me navigate those notes.

I also use transclusions a lot. If it is just a paragraph I want to transclude, a block reference is sufficient; even for a header with 3-4 paragraphs it is doable to transclude each one separately so as to avoid linking to the header.

But when a header has more than 4 paragraphs it is not doable. So, then I would make my transclusion link to the header and all the paragraphs below until the next header (of equal level or 1 higher) will be shown. That is where the automatic update would be required.

Merging those paragraphs into 1 big block of text to not have to link to the header is not acceptable for readability in Live Preview and Reading mode.

So, here is what can be done: place a <br> between paragraphs, which effectively merges them into 1 block of text, but the <br>, which is not visible when not in focus (at least in my set-up), renders them as separate paras in LP and Reading mode.

You can then link to/transclude that one block of text, and that way a change in the header above will not break the link.


You can add a block reference to a heading (I just checked after reading your post). It’s a little ugly because it takes on the heading formatting, but it is properly hidden in reading view.

@CawlinTeffid if you use Reading mode a lot then that is fine, I guess. I am in LP all the time so I won’t use that.

Another thing to bear in mind is that in the Outline pane that block ref will also show.

1 Like

This has to be added manually right? (you need to make a hex code or a human readable ID with the format ^... next to the heading)

If you have Plugin Creases installed it will hides the block ref at heading level (and also helps render Latex and Links) in the Outline pane. It’s made by Liam Cain, now a team member, so I hope it will be incorporated into Obsidian one day. Would be a nice QoL improvement.

I’m a noob, but can the implementation be like below?

  • Treat the Heading reference just like block reference (attaching a UUID to it. This make the UX consistent.
  • Have 2 embed syntaxes, one to embed only the heading, and the other to embed the heading with its content.
1 Like

If I have # Some header %^123abc% it shows up in the outline even with the Creases plug-in enabled.

So, how can I prevent the %^123abc% to show in the Outline pane?

Yes (they can also be added via templates).

I’m probably missing out on something here, but I thought the block UUID on a header should have the format # Some header ^123abc?

With the Creases plugin the ^123abc will be hidden like below

I don’t understand the function of the 2 percentage signs % and why they need to be there?

Could you clarify this a bit? I was thinking of generating a UID for a random block and then cut and paste it to the Header. Not very elegant.

1 Like

For that you could make a date-based ID in a template, like ^{{date:YYYYMMDDHHmmss}}. You might be able to do something fancier using the Templater community plugin (which I haven’t used).


I looked at the Github ReadMe and thought that is what was needed. I obviously misunderstood.

You are absolutely right. Many thanks for pointing that out because that makes life a heck of a lot easier.